Thread: [Mplayerxp-cvslog] SF.net SVN: mplayerxp:[415] mplayerxp (Page 14)
Brought to you by:
olov
From: <nic...@us...> - 2012-11-20 16:14:54
|
Revision: 415 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=415&view=rev Author: nickols_k Date: 2012-11-20 16:14:39 +0000 (Tue, 20 Nov 2012) Log Message: ----------- more c++ sources + constantization Modified Paths: -------------- mplayerxp/libmpcodecs/Makefile mplayerxp/libmpcodecs/ad.h mplayerxp/libmpcodecs/codecs_ld.h mplayerxp/libmpcodecs/dec_audio.h mplayerxp/libmpcodecs/dec_video.h mplayerxp/libmpcodecs/libnuppelvideo/Makefile mplayerxp/libmpcodecs/libnuppelvideo/lzoconf.h mplayerxp/libmpcodecs/libnuppelvideo/minilzo.h mplayerxp/libmpcodecs/vd.h mplayerxp/libmpdemux/Makefile mplayerxp/libmpdemux/aviheader.h mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/libmpdemux/demuxer_r.h mplayerxp/libmpdemux/genres.h mplayerxp/libmpdemux/mpdemux.h mplayerxp/libmpdemux/muxer.h mplayerxp/libmpdemux/stheader.h mplayerxp/libmpdemux/yuv4mpeg.h mplayerxp/libmpstream/Makefile mplayerxp/libmpstream/tvi/Makefile mplayerxp/libmpstream/tvi/tv.h mplayerxp/libmpstream/tvi/tvi_def.h mplayerxp/loader/dmo/DMO_AudioDecoder.h mplayerxp/loader/dmo/DMO_VideoDecoder.h mplayerxp/loader/dshow/DS_AudioDecoder.h mplayerxp/loader/dshow/DS_VideoDecoder.c mplayerxp/loader/dshow/DS_VideoDecoder.h mplayerxp/loader/qtx/qtxsdk/components.h mplayerxp/loader/wine/module.h mplayerxp/osdep/Makefile mplayerxp/osdep/bswap.h Added Paths: ----------- mplayerxp/libmpcodecs/ad_acm.cpp mplayerxp/libmpcodecs/ad_dmo.cpp mplayerxp/libmpcodecs/ad_dshow.cpp mplayerxp/libmpcodecs/ad_dvdpcm.cpp mplayerxp/libmpcodecs/ad_libdv.cpp mplayerxp/libmpcodecs/ad_mp3.cpp mplayerxp/libmpcodecs/ad_null.cpp mplayerxp/libmpcodecs/ad_pcm.cpp mplayerxp/libmpcodecs/ad_qtaudio.cpp mplayerxp/libmpcodecs/ad_real.cpp mplayerxp/libmpcodecs/ad_twin.cpp mplayerxp/libmpcodecs/ad_vorbis.cpp mplayerxp/libmpcodecs/codecs_ld.cpp mplayerxp/libmpcodecs/libnuppelvideo/RTjpegN.cpp mplayerxp/libmpcodecs/libnuppelvideo/minilzo.cpp mplayerxp/libmpcodecs/libnuppelvideo/nuppelvideo.cpp mplayerxp/libmpcodecs/vd_divx4.cpp mplayerxp/libmpcodecs/vd_dmo.cpp mplayerxp/libmpcodecs/vd_dshow.cpp mplayerxp/libmpcodecs/vd_huffyuv.cpp mplayerxp/libmpcodecs/vd_libdv.cpp mplayerxp/libmpcodecs/vd_libmpeg2.cpp mplayerxp/libmpcodecs/vd_mpegpes.cpp mplayerxp/libmpcodecs/vd_null.cpp mplayerxp/libmpcodecs/vd_nuv.cpp mplayerxp/libmpcodecs/vd_qtvideo.cpp mplayerxp/libmpcodecs/vd_raw.cpp mplayerxp/libmpcodecs/vd_real.cpp mplayerxp/libmpcodecs/vd_theora.cpp mplayerxp/libmpcodecs/vd_vfw.cpp mplayerxp/libmpcodecs/vd_xanim.cpp mplayerxp/libmpcodecs/vd_xvid.cpp mplayerxp/libmpdemux/aviprint.cpp mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpdemux/demux_demuxers.cpp mplayerxp/libmpdemux/demux_dv.cpp mplayerxp/libmpdemux/demux_film.cpp mplayerxp/libmpdemux/demux_fli.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mkv.cpp mplayerxp/libmpdemux/demux_mov.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_nsv.cpp mplayerxp/libmpdemux/demux_null.cpp mplayerxp/libmpdemux/demux_nuv.cpp mplayerxp/libmpdemux/demux_ogg.cpp mplayerxp/libmpdemux/demux_pva.cpp mplayerxp/libmpdemux/demux_ra.cpp mplayerxp/libmpdemux/demux_rawaudio.cpp mplayerxp/libmpdemux/demux_rawvideo.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_roq.cpp mplayerxp/libmpdemux/demux_smjpeg.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demux_vqf.cpp mplayerxp/libmpdemux/demux_y4m.cpp mplayerxp/libmpdemux/mp3_hdr.cpp mplayerxp/libmpdemux/mpeg_hdr.cpp mplayerxp/libmpdemux/mux_lavf.cpp mplayerxp/libmpdemux/mux_mpxp64.cpp mplayerxp/libmpdemux/mux_raw.cpp mplayerxp/libmpdemux/parse_es.cpp mplayerxp/libmpdemux/parse_mp4.cpp mplayerxp/libmpdemux/sub_cc.cpp mplayerxp/libmpdemux/sub_ty.cpp mplayerxp/libmpdemux/video.cpp mplayerxp/libmpdemux/yuv4mpeg.cpp mplayerxp/libmpdemux/yuv4mpeg_ratio.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/tvi/frequencies.cpp mplayerxp/libmpstream/tvi/tvi_bsdbt848.cpp mplayerxp/libmpstream/tvi/tvi_dummy.cpp mplayerxp/libmpstream/tvi/tvi_v4l.cpp mplayerxp/osdep/lrmi.cpp mplayerxp/osdep/vbelib.cpp Removed Paths: ------------- mplayerxp/libmpcodecs/ad_acm.c mplayerxp/libmpcodecs/ad_dmo.c mplayerxp/libmpcodecs/ad_dshow.c mplayerxp/libmpcodecs/ad_dvdpcm.c mplayerxp/libmpcodecs/ad_libdv.c mplayerxp/libmpcodecs/ad_mp3.c mplayerxp/libmpcodecs/ad_null.c mplayerxp/libmpcodecs/ad_pcm.c mplayerxp/libmpcodecs/ad_qtaudio.c mplayerxp/libmpcodecs/ad_real.c mplayerxp/libmpcodecs/ad_twin.c mplayerxp/libmpcodecs/ad_vorbis.c mplayerxp/libmpcodecs/codecs_ld.c mplayerxp/libmpcodecs/libnuppelvideo/RTjpegN.c mplayerxp/libmpcodecs/libnuppelvideo/minilzo.c mplayerxp/libmpcodecs/libnuppelvideo/nuppelvideo.c mplayerxp/libmpcodecs/vd_divx4.c mplayerxp/libmpcodecs/vd_dmo.c mplayerxp/libmpcodecs/vd_dshow.c mplayerxp/libmpcodecs/vd_huffyuv.c mplayerxp/libmpcodecs/vd_libdv.c mplayerxp/libmpcodecs/vd_libmpeg2.c mplayerxp/libmpcodecs/vd_mpegpes.c mplayerxp/libmpcodecs/vd_null.c mplayerxp/libmpcodecs/vd_nuv.c mplayerxp/libmpcodecs/vd_qtvideo.c mplayerxp/libmpcodecs/vd_raw.c mplayerxp/libmpcodecs/vd_real.c mplayerxp/libmpcodecs/vd_theora.c mplayerxp/libmpcodecs/vd_vfw.c mplayerxp/libmpcodecs/vd_xanim.c mplayerxp/libmpcodecs/vd_xvid.c mplayerxp/libmpdemux/aviprint.c mplayerxp/libmpdemux/demux_aiff.c mplayerxp/libmpdemux/demux_asf.c mplayerxp/libmpdemux/demux_audio.c mplayerxp/libmpdemux/demux_avi.c mplayerxp/libmpdemux/demux_bmp.c mplayerxp/libmpdemux/demux_demuxers.c mplayerxp/libmpdemux/demux_dv.c mplayerxp/libmpdemux/demux_film.c mplayerxp/libmpdemux/demux_fli.c mplayerxp/libmpdemux/demux_lavf.c mplayerxp/libmpdemux/demux_mkv.c mplayerxp/libmpdemux/demux_mov.c mplayerxp/libmpdemux/demux_mpg.c mplayerxp/libmpdemux/demux_mpxp64.c mplayerxp/libmpdemux/demux_nsv.c mplayerxp/libmpdemux/demux_null.c mplayerxp/libmpdemux/demux_nuv.c mplayerxp/libmpdemux/demux_ogg.c mplayerxp/libmpdemux/demux_pva.c mplayerxp/libmpdemux/demux_ra.c mplayerxp/libmpdemux/demux_rawaudio.c mplayerxp/libmpdemux/demux_rawvideo.c mplayerxp/libmpdemux/demux_real.c mplayerxp/libmpdemux/demux_roq.c mplayerxp/libmpdemux/demux_smjpeg.c mplayerxp/libmpdemux/demux_ts.c mplayerxp/libmpdemux/demux_ty.c mplayerxp/libmpdemux/demux_viv.c mplayerxp/libmpdemux/demux_vqf.c mplayerxp/libmpdemux/demux_y4m.c mplayerxp/libmpdemux/mp3_hdr.c mplayerxp/libmpdemux/mpeg_hdr.c mplayerxp/libmpdemux/mux_lavf.c mplayerxp/libmpdemux/mux_mpxp64.c mplayerxp/libmpdemux/mux_raw.c mplayerxp/libmpdemux/parse_es.c mplayerxp/libmpdemux/parse_mp4.c mplayerxp/libmpdemux/sub_cc.c mplayerxp/libmpdemux/sub_ty.c mplayerxp/libmpdemux/video.c mplayerxp/libmpdemux/yuv4mpeg.c mplayerxp/libmpdemux/yuv4mpeg_ratio.c mplayerxp/libmpstream/s_tv.c mplayerxp/libmpstream/tvi/frequencies.c mplayerxp/libmpstream/tvi/tvi_bsdbt848.c mplayerxp/libmpstream/tvi/tvi_dummy.c mplayerxp/libmpstream/tvi/tvi_v4l.c mplayerxp/osdep/lrmi.c mplayerxp/osdep/vbelib.c Modified: mplayerxp/libmpcodecs/Makefile =================================================================== --- mplayerxp/libmpcodecs/Makefile 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/Makefile 2012-11-20 16:14:39 UTC (rev 415) @@ -8,47 +8,50 @@ CXXSRCS=dec_video.cpp vd.cpp ad.cpp dec_audio.cpp CXXSRCS+=ad_a52.cpp ad_hwac3.cpp -CXXSRCS+=vd_ffmpeg.cpp ad_dca.cpp ad_faad.cpp ad_ffmpeg.cpp -SRCS=vd_null.c \ - vd_raw.c \ - vd_nuv.c \ - vd_libmpeg2.c \ - vd_xvid.c \ - vd_mpegpes.c \ - vd_huffyuv.c \ - ad_null.c \ - ad_mp3.c \ - ad_pcm.c \ - ad_dvdpcm.c \ - codecs_ld.c +CXXSRCS+=vd_ffmpeg.cpp \ + vd_null.cpp \ + vd_nuv.cpp \ + vd_raw.cpp \ + vd_libmpeg2.cpp \ + vd_xvid.cpp \ + vd_mpegpes.cpp \ + vd_huffyuv.cpp \ + ad_dca.cpp \ + ad_faad.cpp \ + ad_ffmpeg.cpp \ + ad_null.cpp \ + ad_mp3.cpp \ + ad_pcm.cpp \ + ad_dvdpcm.cpp \ + codecs_ld.cpp ifeq ($(ENABLE_GPL_ONLY),no) -SRCS+=vd_divx4.c \ - ad_real.c \ - vd_real.c \ - vd_xanim.c +CXXSRCS+=vd_divx4.cpp \ + ad_real.cpp \ + vd_real.cpp \ + vd_xanim.cpp endif ifeq ($(HAVE_LIBVORBIS),yes) -SRCS+=ad_vorbis.c +CXXSRCS+=ad_vorbis.cpp endif ifeq ($(HAVE_LIBTHEORA),yes) -SRCS+=vd_theora.c +CXXSRCS+=vd_theora.cpp endif ifeq ($(HAVE_LIBDV),yes) -SRCS+= ad_libdv.c vd_libdv.c +CXXSRCS+= ad_libdv.cpp vd_libdv.cpp endif ifeq ($(ENABLE_WIN32LOADER),yes) -SRCS+=vd_dshow.c \ - vd_vfw.c \ - vd_dmo.c \ - vd_qtvideo.c \ - ad_dshow.c \ - ad_acm.c \ - ad_dmo.c \ - ad_qtaudio.c \ - ad_twin.c +CXXSRCS+=vd_dshow.cpp \ + vd_vfw.cpp \ + vd_dmo.cpp \ + vd_qtvideo.cpp \ + ad_dshow.cpp \ + ad_acm.cpp \ + ad_dmo.cpp \ + ad_qtaudio.cpp \ + ad_twin.cpp endif OBJS=$(SRCS:.c=.o) @@ -90,7 +93,7 @@ depend: $(DO_MAKE) - $(CC) -MM $(CFLAGS) $(SRCS) $(CXXSRCS) 1>.depend + $(CXX) -MM $(CXXFLAGS) $(SRCS) $(CXXSRCS) 1>.depend # # include dependency files if they exist Modified: mplayerxp/libmpcodecs/ad.h =================================================================== --- mplayerxp/libmpcodecs/ad.h 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad.h 2012-11-20 16:14:39 UTC (rev 415) @@ -7,9 +7,6 @@ #include "libmpconf/cfgparser.h" #include "xmpcore/xmp_enums.h" #include "libao2/afmt.h" -#ifdef __cplusplus -extern "C" { -#endif typedef struct ad_info_s { @@ -59,8 +56,5 @@ extern const ad_functions_t* afm_find_driver(const char *name); extern const audio_probe_t* afm_probe_driver(sh_audio_t* sh); #define FIX_APTS(sh_audio,pts,in_size) (sh_audio->i_bps?((float)(pts)+(float)(in_size)/(float)sh_audio->i_bps):((float)(pts))) -#ifdef __cplusplus -} -#endif #endif Deleted: mplayerxp/libmpcodecs/ad_acm.c =================================================================== --- mplayerxp/libmpcodecs/ad_acm.c 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad_acm.c 2012-11-20 16:14:39 UTC (rev 415) @@ -1,253 +0,0 @@ -#include "mp_config.h" -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ -#define __AD_ACM -#include "ad_internal.h" -#include "codecs_ld.h" -#include "loader/wineacm.h" -#include "libmpdemux/aviprint.h" -#include "osdep/mplib.h" -#include "libao2/afmt.h" -#include "help_mp.h" - -static const ad_info_t info = { - "Win32/ACM decoders", - "acm", - "Nickols_K", - "build-in" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(msacm) - -typedef struct priv_s { - float pts; - WAVEFORMATEX o_wf; // out format - HACMSTREAM srcstream; // handle -}priv_t; - -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } - -static int init_acm_audio_codec(sh_audio_t *sh_audio){ - HRESULT ret; - WAVEFORMATEX *in_fmt=sh_audio->wf; - unsigned int srcsize=0; - priv_t*priv=sh_audio->context; - - MSG_V("======= Win32 (ACM) AUDIO Codec init =======\n"); - - priv->srcstream=0; - - priv->o_wf.nChannels=sh_audio->nch; - priv->o_wf.nSamplesPerSec=sh_audio->rate; - priv->o_wf.nAvgBytesPerSec=2*priv->o_wf.nSamplesPerSec*priv->o_wf.nChannels; - priv->o_wf.wFormatTag=WAVE_FORMAT_PCM; - priv->o_wf.nBlockAlign=2*sh_audio->nch; - priv->o_wf.wBitsPerSample=sh_audio->afmt?afmt2bps(sh_audio->afmt)*8:16; - priv->o_wf.cbSize=0; - if(!in_fmt) { - in_fmt=sh_audio->wf=mp_malloc(sizeof(WAVEFORMATEX)); - memcpy(in_fmt,&priv->o_wf,sizeof(WAVEFORMATEX)); - in_fmt->wFormatTag=sh_audio->wtag; - } - - if(mp_conf.verbose) { - MSG_V("Output fmt:\n"); - print_wave_header(&priv->o_wf,sizeof(WAVEFORMATEX)); - } - MSACM_RegisterDriver((const char *)sh_audio->codec->dll_name, sh_audio->wtag, 0); - ret=acmStreamOpen(&priv->srcstream,(HACMDRIVER)NULL,in_fmt,&priv->o_wf,NULL,0,0,0); - if(ret){ - if(ret==ACMERR_NOTPOSSIBLE) - MSG_ERR("ACM_Decoder: Unappropriate audio format\n"); - else - MSG_ERR("ACM_Decoder: acmStreamOpen error: %d", (int)ret); - priv->srcstream=0; - return 0; - } - MSG_V("Audio codec opened OK! ;-)\n"); - - acmStreamSize(priv->srcstream, in_fmt->nBlockAlign, (LPDWORD)&srcsize, ACM_STREAMSIZEF_SOURCE); - srcsize*=2; - //if(srcsize<MAX_OUTBURST) srcsize=MAX_OUTBURST; - if(!srcsize){ - MSG_WARN("Warning! ACM codec reports srcsize=0\n"); - srcsize=16384; - } - // limit srcsize to 4-16kb - //while(srcsize && srcsize<4096) srcsize*=2; - //while(srcsize>16384) srcsize/=2; - sh_audio->audio_out_minsize=srcsize; // audio output min. size - MSG_V("Audio ACM output buffer min. size: %ld\n",srcsize); - - acmStreamSize(priv->srcstream, srcsize, (LPDWORD)&srcsize, ACM_STREAMSIZEF_DESTINATION); - if(srcsize<in_fmt->nBlockAlign) srcsize=2*in_fmt->nBlockAlign; - sh_audio->audio_in_minsize=srcsize; // audio input min. size - MSG_V("Audio ACM input buffer min. size: %ld\n",srcsize); - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; - sh_audio->nch=priv->o_wf.nChannels; - sh_audio->rate=priv->o_wf.nSamplesPerSec; - sh_audio->afmt=bps2afmt((priv->o_wf.wBitsPerSample+7)/8); - sh_audio->a_in_buffer_size=2*sh_audio->audio_in_minsize; - sh_audio->a_in_buffer=mp_malloc(sh_audio->a_in_buffer_size); - sh_audio->a_in_buffer_len=0; - - return 1; -} - -static int close_acm_audio_codec(sh_audio_t *sh_audio) -{ - HRESULT ret; - priv_t *priv=sh_audio->context; - - ret = acmStreamClose(priv->srcstream, 0); - - if (ret) - switch(ret) - { - case ACMERR_BUSY: - case ACMERR_CANCELED: - MSG_DBG2( "ACM_Decoder: stream busy, waiting..\n"); - sleep(100); - return(close_acm_audio_codec(sh_audio)); - case ACMERR_UNPREPARED: - case ACMERR_NOTPOSSIBLE: - return(0); - default: - MSG_WARN( "ACM_Decoder: unknown error occured: %d\n", ret); - return(0); - } -/* MSACM_UnregisterAllDrivers();*/ - return(1); -} - -MPXP_Rc init(sh_audio_t *sh_audio) -{ - float pts; - int ret=decode(sh_audio,sh_audio->a_buffer,4096,sh_audio->a_buffer_size,&pts); - if(ret<0){ - MSG_INFO("ACM decoding error: %d\n",ret); - return MPXP_False; - } - sh_audio->a_buffer_len=ret; - return MPXP_Ok; -} - -MPXP_Rc preinit(sh_audio_t *sh_audio) -{ - /* Win32 ACM audio codec: */ - priv_t *priv; - if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return 0; - priv=sh_audio->context; - if(!init_acm_audio_codec(sh_audio)){ - MSG_ERR(MSGTR_ACMiniterror); - return MPXP_False; - } - MSG_V("INFO: Win32/ACM init OK!\n"); - return MPXP_Ok; -} - -void uninit(sh_audio_t *sh) -{ - close_acm_audio_codec(sh); - mp_free(sh->context); -} - -MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) -{ - int skip; - switch(cmd) { -// case ADCTRL_RESYNC_STREAM: -// sh_audio->a_in_buffer_len=0;/* reset ACM/DShow audio buffer */ -// return MPXP_True; - case ADCTRL_SKIP_FRAME: { - float pts; - skip=sh_audio->wf->nBlockAlign; - if(skip<16){ - skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); - if(skip<16) skip=16; - } - demux_read_data_r(sh_audio->ds,NULL,skip,&pts); - return MPXP_True; - } - default: - return MPXP_Unknown; - } - return MPXP_Unknown; -} - -unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) -{ - ACMSTREAMHEADER ash; - HRESULT hr; - DWORD srcsize=0; - DWORD len=minlen; - priv_t *priv=sh_audio->context; - - acmStreamSize(priv->srcstream,len , &srcsize, ACM_STREAMSIZEF_DESTINATION); - MSG_V("acm says: srcsize=%ld (bufflen=%d size=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,len); - - if(srcsize<sh_audio->wf->nBlockAlign){ - srcsize=sh_audio->wf->nBlockAlign; - acmStreamSize(priv->srcstream, srcsize, &len, ACM_STREAMSIZEF_SOURCE); - MSG_V("acm says: srcsize=%ld (bufflen=%d size=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,len); - if(len>maxlen) len=maxlen; - } - //if(srcsize==0) srcsize=priv->o_wf.nBlockAlign; - if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! - if(sh_audio->a_in_buffer_len<srcsize){ - int l; - l = demux_read_data_r(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len], - srcsize-sh_audio->a_in_buffer_len,pts); - *pts=FIX_APTS(sh_audio,*pts,-sh_audio->a_in_buffer_len); - sh_audio->a_in_buffer_len+=l; - priv->pts=*pts; - } - else *pts=priv->pts; - /* !!! NK: FINALY WE MUST KNOW size of output buffer after a_in_buffer_len modifying !!!! */ - acmStreamSize(priv->srcstream,sh_audio->a_in_buffer_len, &len, ACM_STREAMSIZEF_SOURCE); - MSG_DBG2("acm convert %d -> %d bytes\n",sh_audio->a_in_buffer_len,len); - - memset(&ash, 0, sizeof(ash)); - ash.cbStruct=sizeof(ash); - ash.fdwStatus=0; - ash.dwUser=0; - ash.pbSrc=sh_audio->a_in_buffer; - ash.cbSrcLength=sh_audio->a_in_buffer_len; - ash.pbDst=buf; - ash.cbDstLength=len; - hr=acmStreamPrepareHeader(priv->srcstream,&ash,0); - if(hr){ - MSG_V("ACM_Decoder: acmStreamPrepareHeader error %d\n",(int)hr); - return -1; - } - hr=acmStreamConvert(priv->srcstream,&ash,0); - if(hr){ - MSG_DBG2("ACM_Decoder: acmStreamConvert error %d\n",(int)hr); - switch(hr) - { - case ACMERR_NOTPOSSIBLE: - case ACMERR_UNPREPARED: - MSG_DBG2( "ACM_Decoder: acmStreamConvert error: probarly not initialized!\n"); - } - } - MSG_DBG2("acm converted %d -> %d\n",ash.cbSrcLengthUsed,ash.cbDstLengthUsed); - if(ash.cbSrcLengthUsed>=sh_audio->a_in_buffer_len){ - sh_audio->a_in_buffer_len=0; - } else { - sh_audio->a_in_buffer_len-=ash.cbSrcLengthUsed; - memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[ash.cbSrcLengthUsed],sh_audio->a_in_buffer_len); - priv->pts=FIX_APTS(sh_audio,priv->pts,ash.cbSrcLengthUsed); - } - len=ash.cbDstLengthUsed; - hr=acmStreamUnprepareHeader(priv->srcstream,&ash,0); - if(hr){ - MSG_V("ACM_Decoder: acmStreamUnprepareHeader error %d\n",(int)hr); - } - return len; -} Copied: mplayerxp/libmpcodecs/ad_acm.cpp (from rev 414, mplayerxp/libmpcodecs/ad_acm.c) =================================================================== --- mplayerxp/libmpcodecs/ad_acm.cpp (rev 0) +++ mplayerxp/libmpcodecs/ad_acm.cpp 2012-11-20 16:14:39 UTC (rev 415) @@ -0,0 +1,253 @@ +#include "mp_config.h" +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ +#define __AD_ACM +#include "ad_internal.h" +#include "codecs_ld.h" +#include "loader/wineacm.h" +#include "libmpdemux/aviprint.h" +#include "osdep/mplib.h" +#include "libao2/afmt.h" +#include "help_mp.h" + +static const ad_info_t info = { + "Win32/ACM decoders", + "acm", + "Nickols_K", + "build-in" +}; + +static const config_t options[] = { + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBAD_EXTERN(msacm) + +typedef struct priv_s { + float pts; + WAVEFORMATEX o_wf; // out format + HACMSTREAM srcstream; // handle +}priv_t; + +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } + +static int init_acm_audio_codec(sh_audio_t *sh_audio){ + HRESULT ret; + WAVEFORMATEX *in_fmt=sh_audio->wf; + unsigned int srcsize=0; + priv_t*priv=reinterpret_cast<priv_t*>(sh_audio->context); + + MSG_V("======= Win32 (ACM) AUDIO Codec init =======\n"); + + priv->srcstream=0; + + priv->o_wf.nChannels=sh_audio->nch; + priv->o_wf.nSamplesPerSec=sh_audio->rate; + priv->o_wf.nAvgBytesPerSec=2*priv->o_wf.nSamplesPerSec*priv->o_wf.nChannels; + priv->o_wf.wFormatTag=WAVE_FORMAT_PCM; + priv->o_wf.nBlockAlign=2*sh_audio->nch; + priv->o_wf.wBitsPerSample=sh_audio->afmt?afmt2bps(sh_audio->afmt)*8:16; + priv->o_wf.cbSize=0; + if(!in_fmt) { + in_fmt=sh_audio->wf=new(zeromem) WAVEFORMATEX; + memcpy(in_fmt,&priv->o_wf,sizeof(WAVEFORMATEX)); + in_fmt->wFormatTag=sh_audio->wtag; + } + + if(mp_conf.verbose) { + MSG_V("Output fmt:\n"); + print_wave_header(&priv->o_wf,sizeof(WAVEFORMATEX)); + } + MSACM_RegisterDriver((const char *)sh_audio->codec->dll_name, sh_audio->wtag, 0); + ret=acmStreamOpen(&priv->srcstream,(HACMDRIVER)NULL,in_fmt,&priv->o_wf,NULL,0,0,0); + if(ret){ + if(ret==ACMERR_NOTPOSSIBLE) + MSG_ERR("ACM_Decoder: Unappropriate audio format\n"); + else + MSG_ERR("ACM_Decoder: acmStreamOpen error: %d", (int)ret); + priv->srcstream=0; + return 0; + } + MSG_V("Audio codec opened OK! ;-)\n"); + + acmStreamSize(priv->srcstream, in_fmt->nBlockAlign, (LPDWORD)&srcsize, ACM_STREAMSIZEF_SOURCE); + srcsize*=2; + //if(srcsize<MAX_OUTBURST) srcsize=MAX_OUTBURST; + if(!srcsize){ + MSG_WARN("Warning! ACM codec reports srcsize=0\n"); + srcsize=16384; + } + // limit srcsize to 4-16kb + //while(srcsize && srcsize<4096) srcsize*=2; + //while(srcsize>16384) srcsize/=2; + sh_audio->audio_out_minsize=srcsize; // audio output min. size + MSG_V("Audio ACM output buffer min. size: %ld\n",srcsize); + + acmStreamSize(priv->srcstream, srcsize, (LPDWORD)&srcsize, ACM_STREAMSIZEF_DESTINATION); + if(srcsize<in_fmt->nBlockAlign) srcsize=2*in_fmt->nBlockAlign; + sh_audio->audio_in_minsize=srcsize; // audio input min. size + MSG_V("Audio ACM input buffer min. size: %ld\n",srcsize); + sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; + sh_audio->nch=priv->o_wf.nChannels; + sh_audio->rate=priv->o_wf.nSamplesPerSec; + sh_audio->afmt=bps2afmt((priv->o_wf.wBitsPerSample+7)/8); + sh_audio->a_in_buffer_size=2*sh_audio->audio_in_minsize; + sh_audio->a_in_buffer=new char [sh_audio->a_in_buffer_size]; + sh_audio->a_in_buffer_len=0; + + return 1; +} + +static int close_acm_audio_codec(sh_audio_t *sh_audio) +{ + HRESULT ret; + priv_t *priv=reinterpret_cast<priv_t*>(sh_audio->context); + + ret = acmStreamClose(priv->srcstream, 0); + + if (ret) + switch(ret) + { + case ACMERR_BUSY: + case ACMERR_CANCELED: + MSG_DBG2( "ACM_Decoder: stream busy, waiting..\n"); + sleep(100); + return(close_acm_audio_codec(sh_audio)); + case ACMERR_UNPREPARED: + case ACMERR_NOTPOSSIBLE: + return(0); + default: + MSG_WARN( "ACM_Decoder: unknown error occured: %d\n", ret); + return(0); + } +/* MSACM_UnregisterAllDrivers();*/ + return(1); +} + +MPXP_Rc init(sh_audio_t *sh_audio) +{ + float pts; + int ret=decode(sh_audio,reinterpret_cast<unsigned char*>(sh_audio->a_buffer),4096,sh_audio->a_buffer_size,&pts); + if(ret<0){ + MSG_INFO("ACM decoding error: %d\n",ret); + return MPXP_False; + } + sh_audio->a_buffer_len=ret; + return MPXP_Ok; +} + +MPXP_Rc preinit(sh_audio_t *sh_audio) +{ + /* Win32 ACM audio codec: */ + priv_t *priv; + if(!(priv=new(zeromem) priv_t)) return MPXP_False; + sh_audio->context=priv; + if(!init_acm_audio_codec(sh_audio)){ + MSG_ERR(MSGTR_ACMiniterror); + return MPXP_False; + } + MSG_V("INFO: Win32/ACM init OK!\n"); + return MPXP_Ok; +} + +void uninit(sh_audio_t *sh) +{ + close_acm_audio_codec(sh); + mp_free(sh->context); +} + +MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +{ + int skip; + switch(cmd) { +// case ADCTRL_RESYNC_STREAM: +// sh_audio->a_in_buffer_len=0;/* reset ACM/DShow audio buffer */ +// return MPXP_True; + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh_audio->wf->nBlockAlign; + if(skip<16){ + skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); + if(skip<16) skip=16; + } + demux_read_data_r(sh_audio->ds,NULL,skip,&pts); + return MPXP_True; + } + default: + return MPXP_Unknown; + } + return MPXP_Unknown; +} + +unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) +{ + ACMSTREAMHEADER ash; + HRESULT hr; + DWORD srcsize=0; + DWORD len=minlen; + priv_t *priv=reinterpret_cast<priv_t*>(sh_audio->context); + + acmStreamSize(priv->srcstream,len , &srcsize, ACM_STREAMSIZEF_DESTINATION); + MSG_V("acm says: srcsize=%ld (bufflen=%d size=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,len); + + if(srcsize<sh_audio->wf->nBlockAlign){ + srcsize=sh_audio->wf->nBlockAlign; + acmStreamSize(priv->srcstream, srcsize, &len, ACM_STREAMSIZEF_SOURCE); + MSG_V("acm says: srcsize=%ld (bufflen=%d size=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,len); + if(len>maxlen) len=maxlen; + } + //if(srcsize==0) srcsize=priv->o_wf.nBlockAlign; + if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! + if(sh_audio->a_in_buffer_len<srcsize){ + int l; + l = demux_read_data_r(sh_audio->ds,reinterpret_cast<unsigned char*>(&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len]), + srcsize-sh_audio->a_in_buffer_len,pts); + *pts=FIX_APTS(sh_audio,*pts,-sh_audio->a_in_buffer_len); + sh_audio->a_in_buffer_len+=l; + priv->pts=*pts; + } + else *pts=priv->pts; + /* !!! NK: FINALY WE MUST KNOW size of output buffer after a_in_buffer_len modifying !!!! */ + acmStreamSize(priv->srcstream,sh_audio->a_in_buffer_len, &len, ACM_STREAMSIZEF_SOURCE); + MSG_DBG2("acm convert %d -> %d bytes\n",sh_audio->a_in_buffer_len,len); + + memset(&ash, 0, sizeof(ash)); + ash.cbStruct=sizeof(ash); + ash.fdwStatus=0; + ash.dwUser=0; + ash.pbSrc=reinterpret_cast<BYTE*>(sh_audio->a_in_buffer); + ash.cbSrcLength=sh_audio->a_in_buffer_len; + ash.pbDst=buf; + ash.cbDstLength=len; + hr=acmStreamPrepareHeader(priv->srcstream,&ash,0); + if(hr){ + MSG_V("ACM_Decoder: acmStreamPrepareHeader error %d\n",(int)hr); + return -1; + } + hr=acmStreamConvert(priv->srcstream,&ash,0); + if(hr){ + MSG_DBG2("ACM_Decoder: acmStreamConvert error %d\n",(int)hr); + switch(hr) + { + case ACMERR_NOTPOSSIBLE: + case ACMERR_UNPREPARED: + MSG_DBG2( "ACM_Decoder: acmStreamConvert error: probarly not initialized!\n"); + } + } + MSG_DBG2("acm converted %d -> %d\n",ash.cbSrcLengthUsed,ash.cbDstLengthUsed); + if(ash.cbSrcLengthUsed>=sh_audio->a_in_buffer_len){ + sh_audio->a_in_buffer_len=0; + } else { + sh_audio->a_in_buffer_len-=ash.cbSrcLengthUsed; + memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[ash.cbSrcLengthUsed],sh_audio->a_in_buffer_len); + priv->pts=FIX_APTS(sh_audio,priv->pts,ash.cbSrcLengthUsed); + } + len=ash.cbDstLengthUsed; + hr=acmStreamUnprepareHeader(priv->srcstream,&ash,0); + if(hr){ + MSG_V("ACM_Decoder: acmStreamUnprepareHeader error %d\n",(int)hr); + } + return len; +} Deleted: mplayerxp/libmpcodecs/ad_dmo.c =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.c 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad_dmo.c 2012-11-20 16:14:39 UTC (rev 415) @@ -1,124 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <dlfcn.h> - -#include "codecs_ld.h" - -#include "mp_config.h" -#include "mplayerxp.h" -#include "help_mp.h" -#include "osdep/mplib.h" -#include "ad_internal.h" -#include "ad_msg.h" - -static const ad_info_t info = { - "Win32/DMO decoders", - "dmo", - "A'rpi", - "build-in" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(dmo) - -#include "loader/dmo/DMO_AudioDecoder.h" - -typedef struct dmo_priv_s { - float pts; - DMO_AudioDecoder* ds_adec; -}priv_t; - -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } - -static MPXP_Rc init(sh_audio_t *sh) -{ - UNUSED(sh); - return MPXP_Ok; -} - -static MPXP_Rc preinit(sh_audio_t *sh_audio) -{ - priv_t*priv; - int chans=(mp_conf.ao_channels==sh_audio->wf->nChannels) ? - mp_conf.ao_channels : (sh_audio->wf->nChannels>=2 ? 2 : 1); - if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return MPXP_False; - priv=sh_audio->context; - if(!(priv->ds_adec=DMO_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf,chans))) { - MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); - mp_free(sh_audio->context); - return MPXP_False; - } - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; - sh_audio->nch=chans; - sh_audio->rate=sh_audio->wf->nSamplesPerSec; - sh_audio->audio_in_minsize=4*sh_audio->wf->nBlockAlign; - if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; - sh_audio->audio_out_minsize=4*16384; - MSG_V("INFO: Win32/DMO audio codec init OK!\n"); - return MPXP_Ok; -} - -static void uninit(sh_audio_t *sh) -{ - priv_t*priv = sh->context; - DMO_AudioDecoder_Destroy(priv->ds_adec); - mp_free(priv); -} - -static MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) -{ - int skip; - UNUSED(arg); - switch(cmd) { - case ADCTRL_SKIP_FRAME: { - float pts; - skip=sh_audio->wf->nBlockAlign; - if(skip<16){ - skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); - if(skip<16) skip=16; - } - demux_read_data_r(sh_audio->ds,NULL,skip,&pts); - return MPXP_True; - } - } - return MPXP_Unknown; -} - -static unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) -{ - priv_t* priv = sh_audio->context; - unsigned len=0; - UNUSED(minlen); - { - unsigned size_in=0; - unsigned size_out=0; - unsigned srcsize=DMO_AudioDecoder_GetSrcSize(priv->ds_adec, maxlen); - MSG_DBG2("DMO says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen); - if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! - if((unsigned)sh_audio->a_in_buffer_len<srcsize){ - unsigned l; - l=demux_read_data_r(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len], - srcsize-sh_audio->a_in_buffer_len,pts); - sh_audio->a_in_buffer_len+=l; - priv->pts=*pts; - } - else *pts=priv->pts; - DMO_AudioDecoder_Convert(priv->ds_adec, sh_audio->a_in_buffer,sh_audio->a_in_buffer_len, - buf,maxlen, &size_in,&size_out); - MSG_DBG2("DMO: audio %d -> %d converted (in_buf_len=%d of %d) %f\n" - ,size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,*pts); - if(size_in>=(unsigned)sh_audio->a_in_buffer_len){ - sh_audio->a_in_buffer_len=0; - } else { - sh_audio->a_in_buffer_len-=size_in; - memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len); - priv->pts=FIX_APTS(sh_audio,priv->pts,size_in); - } - len=size_out; - } - return len; -} Copied: mplayerxp/libmpcodecs/ad_dmo.cpp (from rev 414, mplayerxp/libmpcodecs/ad_dmo.c) =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.cpp (rev 0) +++ mplayerxp/libmpcodecs/ad_dmo.cpp 2012-11-20 16:14:39 UTC (rev 415) @@ -0,0 +1,124 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <dlfcn.h> + +#include "codecs_ld.h" + +#include "mp_config.h" +#include "mplayerxp.h" +#include "help_mp.h" +#include "osdep/mplib.h" +#include "ad_internal.h" +#include "ad_msg.h" + +static const ad_info_t info = { + "Win32/DMO decoders", + "dmo", + "A'rpi", + "build-in" +}; + +static const config_t options[] = { + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBAD_EXTERN(dmo) + +#include "loader/dmo/DMO_AudioDecoder.h" + +typedef struct dmo_priv_s { + float pts; + DMO_AudioDecoder* ds_adec; +}priv_t; + +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } + +static MPXP_Rc init(sh_audio_t *sh) +{ + UNUSED(sh); + return MPXP_Ok; +} + +static MPXP_Rc preinit(sh_audio_t *sh_audio) +{ + priv_t*priv; + int chans=(mp_conf.ao_channels==sh_audio->wf->nChannels) ? + mp_conf.ao_channels : (sh_audio->wf->nChannels>=2 ? 2 : 1); + if(!(priv=new(zeromem) priv_t)) return MPXP_False; + sh_audio->context=priv; + if(!(priv->ds_adec=DMO_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf,chans))) { + MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); + mp_free(sh_audio->context); + return MPXP_False; + } + sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; + sh_audio->nch=chans; + sh_audio->rate=sh_audio->wf->nSamplesPerSec; + sh_audio->audio_in_minsize=4*sh_audio->wf->nBlockAlign; + if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; + sh_audio->audio_out_minsize=4*16384; + MSG_V("INFO: Win32/DMO audio codec init OK!\n"); + return MPXP_Ok; +} + +static void uninit(sh_audio_t *sh) +{ + priv_t*priv = reinterpret_cast<priv_t*>(sh->context); + DMO_AudioDecoder_Destroy(priv->ds_adec); + mp_free(priv); +} + +static MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +{ + int skip; + UNUSED(arg); + switch(cmd) { + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh_audio->wf->nBlockAlign; + if(skip<16){ + skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); + if(skip<16) skip=16; + } + demux_read_data_r(sh_audio->ds,NULL,skip,&pts); + return MPXP_True; + } + } + return MPXP_Unknown; +} + +static unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) +{ + priv_t* priv = reinterpret_cast<priv_t*>(sh_audio->context); + unsigned len=0; + UNUSED(minlen); + { + unsigned size_in=0; + unsigned size_out=0; + unsigned srcsize=DMO_AudioDecoder_GetSrcSize(priv->ds_adec, maxlen); + MSG_DBG2("DMO says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen); + if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! + if((unsigned)sh_audio->a_in_buffer_len<srcsize){ + unsigned l; + l=demux_read_data_r(sh_audio->ds,reinterpret_cast<unsigned char*>(&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len]), + srcsize-sh_audio->a_in_buffer_len,pts); + sh_audio->a_in_buffer_len+=l; + priv->pts=*pts; + } + else *pts=priv->pts; + DMO_AudioDecoder_Convert(priv->ds_adec, sh_audio->a_in_buffer,sh_audio->a_in_buffer_len, + buf,maxlen, &size_in,&size_out); + MSG_DBG2("DMO: audio %d -> %d converted (in_buf_len=%d of %d) %f\n" + ,size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,*pts); + if(size_in>=(unsigned)sh_audio->a_in_buffer_len){ + sh_audio->a_in_buffer_len=0; + } else { + sh_audio->a_in_buffer_len-=size_in; + memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len); + priv->pts=FIX_APTS(sh_audio,priv->pts,size_in); + } + len=size_out; + } + return len; +} Deleted: mplayerxp/libmpcodecs/ad_dshow.c =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.c 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad_dshow.c 2012-11-20 16:14:39 UTC (rev 415) @@ -1,121 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ -#include "ad_internal.h" -#include "mp_config.h" -#include "help_mp.h" -#include "osdep/mplib.h" -#include "loader/dshow/DS_AudioDecoder.h" -#include "codecs_ld.h" - -static const ad_info_t info = { - "Win32/DirectShow decoders", - "dshow", - "Nickols_K", - "build-in" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(dshow) - -typedef struct dshow_priv_s { - float pts; - DS_AudioDecoder* ds_adec; -}priv_t; - -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } - -MPXP_Rc init(sh_audio_t *sh) -{ - UNUSED(sh); - return MPXP_Ok; -} - -MPXP_Rc preinit(sh_audio_t *sh_audio) -{ - priv_t *priv; - if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return 0; - priv=sh_audio->context; - if(!(priv->ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf))) { - MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); - mp_free(sh_audio->context); - return MPXP_False; - } - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; - sh_audio->nch=sh_audio->wf->nChannels; - sh_audio->rate=sh_audio->wf->nSamplesPerSec; - sh_audio->audio_in_minsize=2*sh_audio->wf->nBlockAlign; - if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; - sh_audio->audio_out_minsize=16384; - MSG_V("INFO: Win32/DShow init OK!\n"); - return MPXP_Ok; -} - -void uninit(sh_audio_t *sh) -{ - priv_t* priv = sh->context; - DS_AudioDecoder_Destroy(priv->ds_adec); - mp_free(priv); -} - -MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) -{ - int skip; - UNUSED(arg); - switch(cmd) { - case ADCTRL_RESYNC_STREAM: - sh_audio->a_in_buffer_len=0; // reset ACM/DShow audio buffer - return MPXP_True; - case ADCTRL_SKIP_FRAME: { - float pts; - skip=sh_audio->wf->nBlockAlign; - if(skip<16){ - skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); - if(skip<16) skip=16; - } - demux_read_data_r(sh_audio->ds,NULL,skip,&pts); - } - return MPXP_True; - default: - return MPXP_Unknown; - } - return MPXP_Unknown; -} - -unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) -{ - priv_t* priv = sh_audio->context; - unsigned len=0; - UNUSED(minlen); - { unsigned size_in=0; - unsigned size_out=0; - unsigned srcsize=DS_AudioDecoder_GetSrcSize(priv->ds_adec, maxlen); - MSG_DBG3("DShow says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen); - if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! - if((unsigned)sh_audio->a_in_buffer_len<srcsize){ - unsigned l; - l=demux_read_data_r(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len], - srcsize-sh_audio->a_in_buffer_len,pts); - sh_audio->a_in_buffer_len+=l; - priv->pts=*pts; - } - else *pts=priv->pts; - DS_AudioDecoder_Convert(priv->ds_adec, sh_audio->a_in_buffer,sh_audio->a_in_buffer_len, - buf,maxlen, &size_in,&size_out); - MSG_DBG2("DShow: audio %d -> %d converted (in_buf_len=%d of %d) %f\n" - ,size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,*pts); - if(size_in>=(unsigned)sh_audio->a_in_buffer_len){ - sh_audio->a_in_buffer_len=0; - } else { - sh_audio->a_in_buffer_len-=size_in; - memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len); - priv->pts=FIX_APTS(sh_audio,priv->pts,size_in); - } - len=size_out; - } - return len; -} Copied: mplayerxp/libmpcodecs/ad_dshow.cpp (from rev 414, mplayerxp/libmpcodecs/ad_dshow.c) =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.cpp (rev 0) +++ mplayerxp/libmpcodecs/ad_dshow.cpp 2012-11-20 16:14:39 UTC (rev 415) @@ -0,0 +1,121 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ +#include "ad_internal.h" +#include "mp_config.h" +#include "help_mp.h" +#include "osdep/mplib.h" +#include "loader/dshow/DS_AudioDecoder.h" +#include "codecs_ld.h" + +static const ad_info_t info = { + "Win32/DirectShow decoders", + "dshow", + "Nickols_K", + "build-in" +}; + +static const config_t options[] = { + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBAD_EXTERN(dshow) + +typedef struct dshow_priv_s { + float pts; + DS_AudioDecoder* ds_adec; +}priv_t; + +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } + +MPXP_Rc init(sh_audio_t *sh) +{ + UNUSED(sh); + return MPXP_Ok; +} + +MPXP_Rc preinit(sh_audio_t *sh_audio) +{ + priv_t *priv; + if(!(priv=new(zeromem) priv_t)) return MPXP_False; + sh_audio->context=priv; + if(!(priv->ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf))) { + MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); + mp_free(sh_audio->context); + return MPXP_False; + } + sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; + sh_audio->nch=sh_audio->wf->nChannels; + sh_audio->rate=sh_audio->wf->nSamplesPerSec; + sh_audio->audio_in_minsize=2*sh_audio->wf->nBlockAlign; + if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; + sh_audio->audio_out_minsize=16384; + MSG_V("INFO: Win32/DShow init OK!\n"); + return MPXP_Ok; +} + +void uninit(sh_audio_t *sh) +{ + priv_t* priv = reinterpret_cast<priv_t*>(sh->context); + DS_AudioDecoder_Destroy(priv->ds_adec); + mp_free(priv); +} + +MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +{ + int skip; + UNUSED(arg); + switch(cmd) { + case ADCTRL_RESYNC_STREAM: + sh_audio->a_in_buffer_len=0; // reset ACM/DShow audio buffer + return MPXP_True; + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh_audio->wf->nBlockAlign; + if(skip<16){ + skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); + if(skip<16) skip=16; + } + demux_read_data_r(sh_audio->ds,NULL,skip,&pts); + } + return MPXP_True; + default: + return MPXP_Unknown; + } + return MPXP_Unknown; +} + +unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) +{ + priv_t* priv = reinterpret_cast<priv_t*>(sh_audio->context); + unsigned len=0; + UNUSED(minlen); + { unsigned size_in=0; + unsigned size_out=0; + unsigned srcsize=DS_AudioDecoder_GetSrcSize(priv->ds_adec, maxlen); + MSG_DBG3("DShow says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen); + if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! + if((unsigned)sh_audio->a_in_buffer_len<srcsize){ + unsigned l; + l=demux_read_data_r(sh_audio->ds,reinterpret_cast<unsigned char*>(&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len]), + srcsize-sh_audio->a_in_buffer_len,pts); + sh_audio->a_in_buffer_len+=l; + priv->pts=*pts; + } + else *pts=priv->pts; + DS_AudioDecoder_Convert(priv->ds_adec, reinterpret_cast<unsigned char*>(sh_audio->a_in_buffer),sh_audio->a_in_buffer_len, + buf,maxlen, &size_in,&size_out); + MSG_DBG2("DShow: audio %d -> %d converted (in_buf_len=%d of %d) %f\n" + ,size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,*pts); + if(size_in>=(unsigned)sh_audio->a_in_buffer_len){ + sh_audio->a_in_buffer_len=0; + } else { + sh_audio->a_in_buffer_len-=size_in; + memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len); + priv->pts=FIX_APTS(sh_audio,priv->pts,size_in); + } + len=size_out; + } + return len; +} Deleted: mplayerxp/libmpcodecs/ad_dvdpcm.c =================================================================== --- mplayerxp/libmpcodecs/ad_dvdpcm.c 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad_dvdpcm.c 2012-11-20 16:14:39 UTC (rev 415) @@ -1,162 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include "ad_internal.h" -#include "osdep/bswap.h" -#include "libao2/afmt.h" - -static const ad_info_t info = { - "Uncompressed DVD/VOB LPCM audio decoder", - "dvdpcm", - "Nickols_K", - "build-in" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(dvdpcm) - -static const audio_probe_t probes[] = { - { "dvdpcm", "dvdpcm", 0x10001, ACodecStatus_Working, {AFMT_S24_LE, AFMT_S16_LE} }, - { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} -}; - -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { - unsigned i; - for(i=0;probes[i].driver;i++) - if(wtag==probes[i].wtag) - return &probes[i]; - return NULL; -} - -MPXP_Rc init(sh_audio_t *sh) -{ -/* DVD PCM Audio:*/ - sh->i_bps = 0; - if(sh->codecdata_len==3){ - // we have LPCM header: - unsigned char h=sh->codecdata[1]; - sh->nch=1+(h&7); - switch((h>>4)&3){ - case 0: sh->rate=48000;break; - case 1: sh->rate=96000;break; - case 2: sh->rate=44100;break; - case 3: sh->rate=32000;break; - } - switch ((h >> 6) & 3) { - case 0: - sh->afmt = AFMT_S16_BE; - break; - case 1: - //sh->afmt = AFMT_S20_BE; - sh->i_bps = sh->nch * sh->rate * 5 / 2; - case 2: - sh->afmt = AFMT_S24_BE; - break; - default: - sh->afmt = AFMT_S16_BE; - } - } else { - // use defaults: - sh->nch=2; - sh->rate=48000; - sh->afmt = AFMT_S16_BE; - } - if (!sh->i_bps) - sh->i_bps = afmt2bps(sh->afmt) * sh->nch * sh->rate; - return MPXP_Ok; -} - -MPXP_Rc preinit(sh_audio_t *sh) -{ - sh->audio_out_minsize=2048; - return MPXP_Ok; -} - -void uninit(sh_audio_t *sh) -{ - UNUSED(sh); -} - -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) -{ - int skip; - UNUSED(arg); - switch(cmd) { - case ADCTRL_SKIP_FRAME: { - float pts; - skip=sh->i_bps/16; - skip=skip&(~3); - demux_read_data_r(sh->ds,NULL,skip,&pts); - return MPXP_True; - } - default: - return MPXP_Unknown; - } - return MPXP_Unknown; -} - -unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) -{ - int j; - unsigned len; - float null_pts; - UNUSED(maxlen); - if (afmt2bps(sh_audio->afmt) == 3) { - if (((sh_audio->codecdata[1] >> 6) & 3) == 1) { - // 20 bit - // not sure if the "& 0xf0" and "<< 4" are the right way around - // can somebody clarify? - for (j = 0; j < minlen; j += 12) { - char tmp[10]; - len = demux_read_data_r(sh_audio->ds, tmp, 10,j?&null_pts:pts); - if (len < 10) break; - // first sample - buf[j + 0] = tmp[0]; - buf[j + 1] = tmp[1]; - buf[j + 2] = tmp[8] & 0xf0; - // second sample - buf[j + 3] = tmp[2]; - buf[j + 4] = tmp[3]; - buf[j + 5] = tmp[8] << 4; - // third sample - buf[j + 6] = tmp[4]; - buf[j + 7] = tmp[5]; - buf[j + 8] = tmp[9] & 0xf0; - // fourth sample - buf[j + 9] = tmp[6]; - buf[j + 10] = tmp[7]; - buf[j + 11] = tmp[9] << 4; - } - len = j; - } else { - // 24 bit - for (j = 0; j < minlen; j += 12) { - char tmp[12]; - len = demux_read_data_r(sh_audio->ds, tmp, 12, j?&null_pts:pts); - if (len < 12) break; - // first sample - buf[j + 0] = tmp[0]; - buf[j + 1] = tmp[1]; - buf[j + 2] = tmp[8]; - // second sample - buf[j + 3] = tmp[2]; - buf[j + 4] = tmp[3]; - buf[j + 5] = tmp[9]; - // third sample - buf[j + 6] = tmp[4]; - buf[j + 7] = tmp[5]; - buf[j + 8] = tmp[10]; - // fourth sample - buf[j + 9] = tmp[6]; - buf[j + 10] = tmp[7]; - buf[j + 11] = tmp[11]; - } - len = j; - } - } else - len=demux_read_data_r(sh_audio->ds,buf,(minlen+3)&(~3),pts); - return len; -} Copied: mplayerxp/libmpcodecs/ad_dvdpcm.cpp (from rev 414, mplayerxp/libmpcodecs/ad_dvdpcm.c) =================================================================== --- mplayerxp/libmpcodecs/ad_dvdpcm.cpp (rev 0) +++ mplayerxp/libmpcodecs/ad_dvdpcm.cpp 2012-11-20 16:14:39 UTC (rev 415) @@ -0,0 +1,162 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include "ad_internal.h" +#include "osdep/bswap.h" +#include "libao2/afmt.h" + +static const ad_info_t info = { + "Uncompressed DVD/VOB LPCM audio decoder", + "dvdpcm", + "Nickols_K", + "build-in" +}; + +static const config_t options[] = { + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBAD_EXTERN(dvdpcm) + +static const audio_probe_t probes[] = { + { "dvdpcm", "dvdpcm", 0x10001, ACodecStatus_Working, {AFMT_S24_LE, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; + +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + +MPXP_Rc init(sh_audio_t *sh) +{ +/* DVD PCM Audio:*/ + sh->i_bps = 0; + if(sh->codecdata_len==3){ + // we have LPCM header: + unsigned char h=sh->codecdata[1]; + sh->nch=1+(h&7); + switch((h>>4)&3){ + case 0: sh->rate=48000;break; + case 1: sh->rate=96000;break; + case 2: sh->rate=44100;break; + case 3: sh->rate=32000;break; + } + switch ((h >> 6) & 3) { + case 0: + sh->afmt = AFMT_S16_BE; + break; + case 1: + //sh->afmt = AFMT_S20_BE; + sh->i_bps = sh->nch * sh->rate * 5 / 2; + case 2: + sh->afmt = AFMT_S24_BE; + break; + default: + sh->afmt = AFMT_S16_BE; + } + } else { + // use defaults: + sh->nch=2; + sh->rate=48000; + sh->afmt = AFMT_S16_BE; + } + if (!sh->i_bps) + sh->i_bps = afmt2bps(sh->afmt) * sh->nch * sh->rate; + return MPXP_Ok; +} + +MPXP_Rc preinit(sh_audio_t *sh) +{ + sh->audio_out_minsize=2048; + return MPXP_Ok; +} + +void uninit(sh_audio_t *sh) +{ + UNUSED(sh); +} + +MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +{ + int skip; + UNUSED(arg); + switch(cmd) { + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh->i_bps/16; + skip=skip&(~3); + demux_read_data_r(sh->ds,NULL,skip,&pts); + return MPXP_True; + } + default: + return MPXP_Unknown; + } + return MPXP_Unknown; +} + +unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) +{ + unsigned j; + unsigned len; + float null_pts; + UNUSED(maxlen); + if (afmt2bps(sh_audio->afmt) == 3) { + if (((sh_audio->codecdata[1] >> 6) & 3) == 1) { + // 20 bit + // not sure if the "& 0xf0" and "<< 4" are the right way around + // can somebody clarify? + for (j = 0; j < minlen; j += 12) { + unsigned char tmp[10]; + len = demux_read_data_r(sh_audio->ds, tmp, 10,j?&null_pts:pts); + if (len < 10) break; + // first sample + buf[j + 0] = tmp[0]; + buf[j + 1] = tmp[1]; + buf[j + 2] = tmp[8] & 0xf0; + // second sample + buf[j + 3] = tmp[2]; + buf[j + 4] = tmp[3]; + buf[j + 5] = tmp[8] << 4; + // third sample + buf[j + 6] = tmp[4]; + buf[j + 7] = tmp[5]; + buf[j + 8] = tmp[9] & 0xf0; + // fourth sample + buf[j + 9] = tmp[6]; + buf[j + 10] = tmp[7]; + buf[j + 11] = tmp[9] << 4; + } + len = j; + } else { + // 24 bit + for (j = 0; j < minlen; j += 12) { + unsigned char tmp[12]; + len = demux_read_data_r(sh_audio->ds, tmp, 12, j?&null_pts:pts); + if (len < 12) break; + // first sample + buf[j + 0] = tmp[0]; + buf[j + 1] = tmp[1]; + buf[j + 2] = tmp[8]; + // second sample + buf[j + 3] = tmp[2]; + buf[j + 4] = tmp[3]; + buf[j + 5] = tmp[9]; + // third sample + buf[j + 6] = tmp[4]; + buf[j + 7] = tmp[5]; + buf[j + 8] = tmp[10]; + // fourth sample + buf[j + 9] = tmp[6]; + buf[j + 10] = tmp[7]; + buf[j + 11] = tmp[11]; + } + len = j; + } + } else + len=demux_read_data_r(sh_audio->ds,buf,(minlen+3)&(~3),pts); + return len; +} Deleted: mplayerxp/libmpcodecs/ad_libdv.c =================================================================== --- mplayerxp/libmpcodecs/ad_libdv.c 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad_libdv.c 2012-11-20 16:14:39 UTC (rev 415) @@ -1,136 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <unistd.h> -#include <math.h> - -#include "mp_config.h" -#include "help_mp.h" -#include "osdep/mplib.h" - -#include <libdv/dv.h> -#include <libdv/dv_types.h> - -#include "libmpstream/stream.h" -#include "libmpdemux/demuxer.h" -#include "libmpdemux/stheader.h" -#include "libao2/afmt.h" -#include "osdep/bswap.h" - -#include "ad_internal.h" - -static const ad_info_t info = { - "Raw DV Audio Decoder", - "libdv", - "Alexander Neundorf <neu...@kd...>", - "http://libdv.sourceforge.net" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(libdv) - -static const audio_probe_t probes[] = { - { "libdv", "libdv", FOURCC_TAG('R','A','D','V'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} -}; - -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { - unsigned i; - for(i=0;probes[i].driver;i++) - if(wtag==probes[i].wtag) - return &probes[i]; - return NULL; -} - -// defined in vd_libdv.c: -dv_decoder_t* init_global_rawdv_decoder(void); - -static MPXP_Rc preinit(sh_audio_t *sh_audio) -{ - sh_audio->audio_out_minsize=4*DV_AUDIO_MAX_SAMPLES*2; - return MPXP_Ok; -} - -typedef struct libdv_priv_s { - dv_decoder_t* decoder; - int16_t *audioBuffers[4]; -}priv_t; - -static MPXP_Rc init(sh_audio_t *sh) -{ - unsigned i; - priv_t *priv; - WAVEFORMATEX *h=sh->wf; - - if(!h) return MPXP_False; - - sh->i_bps=h->nAvgBytesPerSec; - sh->nch=h->nChannels; - sh->rate=h->nSamplesPerSec; - sh->afmt=bps2afmt((h->wBitsPerSample+7)/8); - priv = mp_mallocz(sizeof(priv_t)); - priv->decoder=init_global_rawdv_decoder(); - sh->context = priv; - for (i=0; i < 4; i++) - priv->audioBuffers[i] = mp_malloc(2*DV_AUDIO_MAX_SAMPLES); - - return MPXP_Ok; -} - -static void uninit(sh_audio_t *sh_audio) -{ - priv_t *priv = sh_audio->context; - unsigned i; - UNUSED(sh_audio); - for (i=0; i < 4; i++) - mp_free(priv->audioBuffers[i]); -} - -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) -{ - // TODO!!! - UNUSED(sh); - UNUSED(cmd); - UNUSED(arg); - return MPXP_Unknown; -} - -static unsigned decode(sh_audio_t *sh, unsigned char *buf, unsigned minlen, unsigned maxlen,float *pts) -{ - priv_t *priv = sh->context; - dv_decoder_t* decoder=priv->decoder; //global_rawdv_decoder; - unsigned char* dv_audio_frame=NULL; - unsigned xx; - size_t len=0; - float apts; - UNUSED(maxlen); - while(len<minlen) { - xx=ds_get_packet_r(sh->ds,&dv_audio_frame,len>0?&apts:pts); - if((int)xx<=0 || !dv_audio_frame) return 0; // EOF? - - dv_parse_header(decoder, dv_audio_frame); - - if(xx!=decoder->frame_size) - MSG_WARN("AudioFramesize differs %u %u\n",xx, decoder->frame_size); - - if (dv_decode_full_audio(decoder, dv_audio_frame,(int16_t**)priv->audioBuffers)) { - /* Interleave the audio into a single buffer */ - int i=0; - int16_t *bufP=(int16_t*)buf; - - for (i=0; i < decoder->audio->samples_this_frame; i++) - { - int ch; - for (ch=0; ch < decoder->audio->num_channels; ch++) - bufP[len++] = priv->audioBuffers[ch][i]; - } - } - len+=decoder->audio->samples_this_frame; - buf+=decoder->audio->samples_this_frame; - } - return len*2; -} Copied: mplayerxp/libmpcodecs/ad_libdv.cpp (from rev 414, mplayerxp/libmpcodecs/ad_libdv.c) =================================================================== --- mplayerxp/libmpcodecs/ad_libdv.cpp (rev 0) +++ mplayerxp/libmpcodecs/ad_libdv.cpp 2012-11-20 16:14:39 UTC (rev 415) @@ -0,0 +1,136 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> +#include <math.h> + +#include "mp_config.h" +#include "help_mp.h" +#include "osdep/mplib.h" + +#include <libdv/dv.h> +#include <libdv/dv_types.h> + +#include "libmpstream/stream.h" +#include "libmpdemux/demuxer.h" +#include "libmpdemux/stheader.h" +#include "libao2/afmt.h" +#include "osdep/bswap.h" + +#include "ad_internal.h" + +static const ad_info_t info = { + "Raw DV Audio Decoder", + "libdv", + "Alexander Neundorf <neu...@kd...>", + "http://libdv.sourceforge.net" +}; + +static const config_t options[] = { + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBAD_EXTERN(libdv) + +static const audio_probe_t probes[] = { + { "libdv", "libdv", FOURCC_TAG('R','A','D','V'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} +}; + +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + for(i=0;probes[i].driver;i++) + if(wtag==probes[i].wtag) + return &probes[i]; + return NULL; +} + +// defined in vd_libdv.c: +dv_decoder_t* init_global_rawdv_decoder(void); + +static MPXP_Rc preinit(sh_audio_t *sh_audio) +{ + sh_audio->audio_out_minsize=4*DV_AUDIO_MAX_SAMPLES*2; + return MPXP_Ok; +} + +typedef struct libdv_priv_s { + dv_decoder_t* decoder; + int16_t *audioBuffers[4]; +}priv_t; + +static MPXP_Rc init(sh_audio_t *sh) +{ + unsigned i; + priv_t *priv; + WAVEFORMATEX *h=sh->wf; + + if(!h) return MPXP_False; + + sh->i_bps=h->nAvgBytesPerSec; + sh->nch=h->nChannels; + sh->rate=h->nSamplesPerSec; + sh->afmt=bps2afmt((h->wBitsPerSample+7)/8); + priv = new(zeromem) priv_t; + priv->decoder=init_global_rawdv_decoder(); + sh->context = priv; + for (i=0; i < 4; i++) + priv->audioBuffers[i] = new int16_t[DV_AUDIO_MAX_SAMPLES]; + + return MPXP_Ok; +} + +static void uninit(sh_audio_t *sh_audio) +{ + priv_t *priv = reinterpret_cast<priv_t*>(sh_audio->context); + unsigned i; + UNUSED(sh_audio); + for (i=0; i < 4; i++) + mp_free(priv->audioBuffers[i]); +} + +static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +{ + // TODO!!! + UNUSED(sh); + UNUSED(cmd); + UNUSED(arg); + return MPXP_Unknown; +} + +static unsigned decode(sh_audio_t *sh, unsigned char *buf, unsigned minlen, unsigned maxlen,float *pts) +{ + priv_t *priv = reinterpret_cast<priv_t*>(sh->context); + dv_decoder_t* decoder=priv->decoder; //global_rawdv_decoder; + unsigned char* dv_audio_frame=NULL; + unsigned xx; + size_t len=0; + float apts; + UNUSED(maxlen); + while(len<minlen) { + xx=ds_get_packet_r(sh->ds,&dv_audio_frame,len>0?&apts:pts); + if((int)xx<=0 || !dv_audio_frame) return 0; // EOF? + + dv_parse_header(decoder, dv_audio_frame); + + if(xx!=decoder->frame_size) + MSG_WARN("AudioFramesize differs %u %u\n",xx, decoder->frame_size); + + if (dv_decode_full_audio(decoder, dv_audio_frame,(int16_t**)priv->audioBuffers)) { + /* Interleave the audio into a single buffer */ + int i=0; + int16_t *bufP=(int16_t*)buf; + + for (i=0; i < decoder->audio->samples_this_frame; i++) + { + int ch; + for (ch=0; ch < decoder->audio->num_channels; ch++) + bufP[len++] = priv->audioBuffers[ch][i]; + } + } + len+=decoder->audio->samples_this_frame; + buf+=decoder->audio->samples_this_frame; + } + return len*2; +} Deleted: mplayerxp/libmpcodecs/ad_mp3.c =================================================================== --- mplayerxp/libmpcodecs/ad_mp3.c 2012-11-19 15:52:58 UTC (rev 414) +++ mplayerxp/libmpcodecs/ad_mp3.c 2012-11-20 16:14:39 UTC (rev 415) @@ -1,408 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ -#include "ad_internal.h" -#include "mp_config.h" -#include "mplayerxp.h" -#include "osdep/cpudetect.h" -#include "osdep/mm_accel.h" -#include "osdep/fastmemcpy.h" -#include "osdep/mplib.h" -#include "osdep/bswap.h" -#include "codecs_ld.h" -#include "libao2/afmt.h" -#include "libao2/audio_out.h" -#include "postproc/af.h" - -static const ad_info_t info = { - "MPEG layer-123", - "mp3lib", - "Nickols_K", - "http://www.mpg123.de" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(mp3) - -static const audio_probe_t probes[] = { - { "mp3lib", "libmpg123", 0x50, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", 0x55, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", 0x55005354, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", 0x5000736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", 0x5500736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", FOURCC_TAG('.','M','P','3'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", FOURCC_TAG('L','A','M','E'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { "mp3lib", "libmpg123", FOURCC_TAG('M','P','3',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, - { NULL, N... [truncated message content] |
From: <nic...@us...> - 2012-11-22 12:22:22
|
Revision: 430 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=430&view=rev Author: nickols_k Date: 2012-11-22 12:22:07 +0000 (Thu, 22 Nov 2012) Log Message: ----------- replace mp_free() with operator delete Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/input2/input.cpp mplayerxp/libao2/ao_alsa9.cpp mplayerxp/libao2/ao_esd.cpp mplayerxp/libao2/ao_jack.cpp mplayerxp/libao2/ao_nas.cpp mplayerxp/libao2/ao_null.cpp mplayerxp/libao2/ao_openal.cpp mplayerxp/libao2/ao_oss.cpp mplayerxp/libao2/ao_sdl.cpp mplayerxp/libao2/ao_wav.cpp mplayerxp/libmpcodecs/ad_a52.cpp mplayerxp/libmpcodecs/ad_acm.cpp mplayerxp/libmpcodecs/ad_dca.cpp mplayerxp/libmpcodecs/ad_dmo.cpp mplayerxp/libmpcodecs/ad_dshow.cpp mplayerxp/libmpcodecs/ad_faad.cpp mplayerxp/libmpcodecs/ad_ffmpeg.cpp mplayerxp/libmpcodecs/ad_libdv.cpp mplayerxp/libmpcodecs/ad_mp3.cpp mplayerxp/libmpcodecs/ad_real.cpp mplayerxp/libmpcodecs/ad_twin.cpp mplayerxp/libmpcodecs/ad_vorbis.cpp mplayerxp/libmpcodecs/libdca/parse.cpp mplayerxp/libmpcodecs/vd_divx4.cpp mplayerxp/libmpcodecs/vd_ffmpeg.cpp mplayerxp/libmpcodecs/vd_huffyuv.cpp mplayerxp/libmpcodecs/vd_libmpeg2.cpp mplayerxp/libmpcodecs/vd_real.cpp mplayerxp/libmpcodecs/vd_theora.cpp mplayerxp/libmpcodecs/vd_vfw.cpp mplayerxp/libmpcodecs/vd_xanim.cpp mplayerxp/libmpconf/codec-cfg.cpp mplayerxp/libmpconf/m_option.cpp mplayerxp/libmpconf/m_property.cpp mplayerxp/libmpconf/m_struct.cpp mplayerxp/libmpconf/subopt-helper.cpp mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpdemux/demux_demuxers.cpp mplayerxp/libmpdemux/demux_dv.cpp mplayerxp/libmpdemux/demux_film.cpp mplayerxp/libmpdemux/demux_fli.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mkv.cpp mplayerxp/libmpdemux/demux_mov.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_nsv.cpp mplayerxp/libmpdemux/demux_nuv.cpp mplayerxp/libmpdemux/demux_ogg.cpp mplayerxp/libmpdemux/demux_pva.cpp mplayerxp/libmpdemux/demux_ra.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demux_y4m.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer_r.cpp mplayerxp/libmpdemux/mpeg_hdr.cpp mplayerxp/libmpdemux/mux_lavf.cpp mplayerxp/libmpdemux/mux_mpxp64.cpp mplayerxp/libmpdemux/muxer.cpp mplayerxp/libmpdemux/parse_mp4.cpp mplayerxp/libmpdemux/sub_cc.cpp mplayerxp/libmpdemux/sub_ty.cpp mplayerxp/libmpstream/asf_mmst_streaming.cpp mplayerxp/libmpstream/asf_streaming.cpp mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/cdda.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/cookies.cpp mplayerxp/libmpstream/freesdp/common.cpp mplayerxp/libmpstream/http.cpp mplayerxp/libmpstream/librtsp/rtsp_rtp.cpp mplayerxp/libmpstream/librtsp/rtsp_session.cpp mplayerxp/libmpstream/mrl.cpp mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/pnm.cpp mplayerxp/libmpstream/realrtsp/asmrp.cpp mplayerxp/libmpstream/realrtsp/rmff.cpp mplayerxp/libmpstream/realrtsp/sdpplin.cpp mplayerxp/libmpstream/realrtsp/xbuffer.cpp mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_ffmpeg.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/tvi/tvi_dummy.cpp mplayerxp/libmpstream/tvi/tvi_v4l.cpp mplayerxp/libmpstream/url.cpp mplayerxp/libmpsub/subreader.cpp mplayerxp/libmpsub/vobsub.cpp mplayerxp/libplaytree/asxparser.cpp mplayerxp/libplaytree/playtree.cpp mplayerxp/libplaytree/playtreeparser.cpp mplayerxp/libvo/jpeg_enc.cpp mplayerxp/libvo/screenshot.cpp mplayerxp/libvo/sub.cpp mplayerxp/libvo/vo_dga.cpp mplayerxp/libvo/vo_fbdev.cpp mplayerxp/libvo/vo_null.cpp mplayerxp/libvo/vo_opengl.cpp mplayerxp/libvo/vo_vesa.cpp mplayerxp/libvo/vo_xv.cpp mplayerxp/libvo/x11_common.cpp mplayerxp/mp_msg.cpp mplayerxp/mplayerxp.cpp mplayerxp/osdep/cpudetect.cpp mplayerxp/postproc/af_ao2.cpp mplayerxp/postproc/af_channels.cpp mplayerxp/postproc/af_crystality.cpp mplayerxp/postproc/af_delay.cpp mplayerxp/postproc/af_dyn.cpp mplayerxp/postproc/af_echo3d.cpp mplayerxp/postproc/af_equalizer.cpp mplayerxp/postproc/af_extrastereo.cpp mplayerxp/postproc/af_ffenc.cpp mplayerxp/postproc/af_lp.cpp mplayerxp/postproc/af_pan.cpp mplayerxp/postproc/af_raw.cpp mplayerxp/postproc/af_resample.cpp mplayerxp/postproc/af_scaletempo.cpp mplayerxp/postproc/af_sinesuppress.cpp mplayerxp/postproc/af_sub.cpp mplayerxp/postproc/af_surround.cpp mplayerxp/postproc/af_volnorm.cpp mplayerxp/postproc/af_volume.cpp mplayerxp/postproc/libmenu/menu_cmdlist.cpp mplayerxp/postproc/libmenu/menu_console.cpp mplayerxp/postproc/libmenu/menu_filesel.cpp mplayerxp/postproc/libmenu/menu_param.cpp mplayerxp/postproc/vf_delogo.cpp mplayerxp/postproc/vf_denoise3d.cpp mplayerxp/postproc/vf_dint.cpp mplayerxp/postproc/vf_down3dright.cpp mplayerxp/postproc/vf_eq.cpp mplayerxp/postproc/vf_framestep.cpp mplayerxp/postproc/vf_menu.cpp mplayerxp/postproc/vf_noise.cpp mplayerxp/postproc/vf_ow.cpp mplayerxp/postproc/vf_perspective.cpp mplayerxp/postproc/vf_raw.cpp mplayerxp/postproc/vf_scale.cpp mplayerxp/postproc/vf_smartblur.cpp mplayerxp/postproc/vf_softpulldown.cpp mplayerxp/postproc/vf_unsharp.cpp mplayerxp/postproc/vf_vo.cpp mplayerxp/postproc/vf_yuvcsp.cpp mplayerxp/xmpcore/mp_image.cpp mplayerxp/xmpcore/xmp_adecoder.cpp mplayerxp/xmpcore/xmp_core.cpp Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/dump.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -271,7 +271,7 @@ fseeko(priv->mux_file,0,SEEK_SET); muxer_write_header(priv->muxer,demuxer); fclose(priv->mux_file); - mp_free(demuxer->priv); + delete demuxer->priv; demuxer->priv=NULL; } MSG_INFO(MSGTR_CoreDumped); Modified: mplayerxp/input2/input.cpp =================================================================== --- mplayerxp/input2/input.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/input2/input.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -486,7 +486,7 @@ } if(i == priv->num_cmd_fd) return; if(priv->cmd_fds[i].close_func) priv->cmd_fds[i].close_func(priv->cmd_fds[i].opaque); - if(priv->cmd_fds[i].buffer) mp_free(priv->cmd_fds[i].buffer); + if(priv->cmd_fds[i].buffer) delete priv->cmd_fds[i].buffer; if(i + 1 < priv->num_cmd_fd) memmove(&priv->cmd_fds[i],&priv->cmd_fds[i+1],(priv->num_cmd_fd-i-1)*sizeof(mp_input_fd_t)); priv->num_cmd_fd--; } @@ -948,7 +948,7 @@ continue; } ret = mp_input_parse_cmd(cmd); - mp_free(cmd); + delete cmd; if(!ret) continue; last_loop = i; return ret; @@ -1020,9 +1020,9 @@ for(i=0; i < MP_CMD_MAX_ARGS && cmd->args[i].type != -1; i++) { if(cmd->args[i].type == MP_CMD_ARG_STRING && cmd->args[i].v.s != NULL) - mp_free(cmd->args[i].v.s); + delete cmd->args[i].v.s; } - mp_free(cmd); + delete cmd; } static mp_cmd_t* mp_cmd_clone(mp_cmd_t* cmd) { @@ -1129,7 +1129,7 @@ int i; if(!binds) return; for(i = 0; binds[i].cmd != NULL; i++) delete binds[i].cmd; - mp_free(binds); + delete binds; } #define BS_MAX 256 @@ -1339,7 +1339,7 @@ if(priv->cmd_binds[i].cmd != NULL) delete priv->cmd_binds[i].cmd; else break; } - mp_free(priv->cmd_binds); + delete priv->cmd_binds; priv->cmd_binds=NULL; } if(priv->in_file_fd==0) getch2_disable(); @@ -1357,7 +1357,7 @@ void mp_input_close(any_t* handle) { mp_input_uninit(handle); - mp_free(handle); + delete handle; } void mp_input_register_options(m_config_t* cfg) { Modified: mplayerxp/libao2/ao_alsa9.cpp =================================================================== --- mplayerxp/libao2/ao_alsa9.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_alsa9.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -633,21 +633,21 @@ priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); if(!priv->handler) { MSG_ERR("alsa-uninit: no handler defined!\n"); - mp_free(priv); + delete priv; return; } if (!priv_conf.noblock) { if ((err = snd_pcm_drain(priv->handler)) < 0) { MSG_ERR("alsa-uninit: pcm drain error: %s\n", snd_strerror(err)); - mp_free(priv); + delete priv; return; } } if ((err = snd_pcm_close(priv->handler)) < 0) { MSG_ERR("alsa-uninit: pcm close error: %s\n", snd_strerror(err)); - mp_free(priv); + delete priv; return; } else { priv->handler = NULL; @@ -655,7 +655,7 @@ } snd_pcm_hw_params_free(priv->hwparams); snd_pcm_sw_params_free(priv->swparams); - mp_free(priv); + delete priv; } static void audio_pause(ao_data_t* ao) @@ -930,7 +930,7 @@ if ((int)result < 0) result = 0; #ifdef USE_POLL - mp_free(ufds); + delete ufds; #endif return result; Modified: mplayerxp/libao2/ao_esd.cpp =================================================================== --- mplayerxp/libao2/ao_esd.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_esd.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -315,7 +315,7 @@ esd_close(priv->fd); priv->fd = -1; } - mp_free(priv); + delete priv; } Modified: mplayerxp/libao2/ao_jack.cpp =================================================================== --- mplayerxp/libao2/ao_jack.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_jack.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -309,14 +309,14 @@ ao->bps = channels * rate * sizeof(float); ao->buffersize = CHUNK_SIZE * NUM_CHUNKS; ao->outburst = CHUNK_SIZE; - mp_free(matching_ports); - mp_free(port_name); + delete matching_ports; + delete port_name; delete client_name; return MPXP_Ok; err_out: - mp_free(matching_ports); - mp_free(port_name); + delete matching_ports; + delete port_name; delete client_name; if (priv->client) jack_client_close(priv->client); av_fifo_free(priv->buffer); @@ -333,7 +333,7 @@ jack_client_close(priv->client); av_fifo_free(priv->buffer); priv->buffer = NULL; - mp_free(priv); + delete priv; } /** Modified: mplayerxp/libao2/ao_nas.cpp =================================================================== --- mplayerxp/libao2/ao_nas.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_nas.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -528,9 +528,9 @@ pthread_join(priv->event_thread, NULL); AuCloseServer(priv->aud); priv->aud = 0; - mp_free(priv->client_buffer); - mp_free(priv->server_buffer); - mp_free(priv); + delete priv->client_buffer; + delete priv->server_buffer; + delete priv; } // stop playing and empty buffers (for seeking/pause) Modified: mplayerxp/libao2/ao_null.cpp =================================================================== --- mplayerxp/libao2/ao_null.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_null.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -185,7 +185,7 @@ fwrite(&wavhdr,sizeof(wavhdr),1,priv->fd); } if(priv->fd) fclose(priv->fd); - mp_free(priv); + delete priv; } // stop playing and empty priv->buffers (for seeking/pause) Modified: mplayerxp/libao2/ao_openal.cpp =================================================================== --- mplayerxp/libao2/ao_openal.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_openal.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -169,7 +169,7 @@ ALCcontext *ctx = alcGetCurrentContext(); ALCdevice *dev = alcGetContextsDevice(ctx); priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); - mp_free(priv->tmpbuf); + delete priv->tmpbuf; if (!immed) { ALint state; alGetSourcei(priv->sources[0], AL_SOURCE_STATE, &state); @@ -182,7 +182,7 @@ alcMakeContextCurrent(NULL); alcDestroyContext(ctx); alcCloseDevice(dev); - mp_free(ao->priv); + delete ao->priv; } static void unqueue_buffers(const ao_data_t* ao) { Modified: mplayerxp/libao2/ao_oss.cpp =================================================================== --- mplayerxp/libao2/ao_oss.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_oss.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -324,7 +324,7 @@ write(priv->fd,data,ao->outburst); ao->buffersize+=ao->outburst; } - mp_free(data); + delete data; if(ao->buffersize==0){ MSG_ERR("\n *** OSS-CONF: Your audio driver DOES NOT support select() ***\n" "Recompile mplayerxp with #undef HAVE_AUDIO_SELECT in mp_config.h !\n\n"); @@ -351,7 +351,7 @@ #endif close(priv->fd); priv->fd = -1; - mp_free(ao->priv); + delete ao->priv; } // stop playing and empty buffers (for seeking/pause) Modified: mplayerxp/libao2/ao_sdl.cpp =================================================================== --- mplayerxp/libao2/ao_sdl.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_sdl.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -275,7 +275,7 @@ MSG_V("SDL: Audio Subsystem shutting down!\n"); SDL_CloseAudio(); SDL_QuitSubSystem(SDL_INIT_AUDIO); - mp_free(ao->priv); + delete ao->priv; } // stop playing and empty buffers (for seeking/pause) Modified: mplayerxp/libao2/ao_wav.cpp =================================================================== --- mplayerxp/libao2/ao_wav.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libao2/ao_wav.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -198,8 +198,8 @@ } fclose(priv->fp); if (priv->out_filename) - mp_free(priv->out_filename); - mp_free(priv); + delete priv->out_filename; + delete priv; } // stop playing and empty buffers (for seeking/pause) Modified: mplayerxp/libmpcodecs/ad_a52.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_a52.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_a52.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -204,7 +204,7 @@ void uninit(sh_audio_t *sh) { - mp_free(sh->context); + delete sh->context; } MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_acm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_acm.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_acm.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -155,7 +155,7 @@ void uninit(sh_audio_t *sh) { close_acm_audio_codec(sh); - mp_free(sh->context); + delete sh->context; } MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_dca.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dca.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_dca.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -203,7 +203,7 @@ void uninit(sh_audio_t *sh) { - mp_free(sh->context); + delete sh->context; } MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_dmo.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_dmo.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -49,7 +49,7 @@ sh_audio->context=priv; if(!(priv->ds_adec=DMO_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf,chans))) { MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); - mp_free(sh_audio->context); + delete sh_audio->context; return MPXP_False; } sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; @@ -66,7 +66,7 @@ { priv_t*priv = reinterpret_cast<priv_t*>(sh->context); DMO_AudioDecoder_Destroy(priv->ds_adec); - mp_free(priv); + delete priv; } static MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_dshow.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -42,7 +42,7 @@ sh_audio->context=priv; if(!(priv->ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf))) { MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); - mp_free(sh_audio->context); + delete sh_audio->context; return MPXP_False; } sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; @@ -59,7 +59,7 @@ { priv_t* priv = reinterpret_cast<priv_t*>(sh->context); DS_AudioDecoder_Destroy(priv->ds_adec); - mp_free(priv); + delete priv; } MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_faad.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_faad.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_faad.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -273,7 +273,7 @@ { MSG_V("FAAD: Closing decoder!\n"); NeAACDecClose(NeAAC_hdec); - mp_free(sh->context); + delete sh->context; } static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_ffmpeg.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_ffmpeg.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_ffmpeg.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -172,10 +172,10 @@ { priv_t* priv=reinterpret_cast<priv_t*>(sh->context); avcodec_close(priv->lavc_ctx); - if (priv->lavc_ctx->extradata) mp_free(priv->lavc_ctx->extradata); - mp_free(priv->lavc_ctx); + if (priv->lavc_ctx->extradata) delete priv->lavc_ctx->extradata; + delete priv->lavc_ctx; if(priv->probe) { delete priv->probe->codec_dll; delete priv->probe; } - mp_free(priv); + delete priv; sh->context=NULL; } Modified: mplayerxp/libmpcodecs/ad_libdv.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_libdv.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_libdv.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -87,7 +87,7 @@ unsigned i; UNUSED(sh_audio); for (i=0; i < 4; i++) - mp_free(priv->audioBuffers[i]); + delete priv->audioBuffers[i]; } static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/ad_mp3.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_mp3.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_mp3.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -312,7 +312,7 @@ mpg123_close(priv->mh); mpg123_delete(priv->mh); mpg123_exit(); - mp_free(priv); + delete priv; return MPXP_False; } mpg123_getformat(priv->mh, &rate, &nch, &enc); @@ -349,7 +349,7 @@ mpg123_close(priv->mh); mpg123_delete(priv->mh); mpg123_exit(); - mp_free(priv); + delete priv; dlclose(dll_handle); } Modified: mplayerxp/libmpcodecs/ad_real.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_real.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_real.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -52,7 +52,7 @@ /* required for cook's uninit: */ void __builtin_delete(any_t* ize) { - mp_free(ize); + delete ize; } #if defined(__FreeBSD__) || defined(__NetBSD__) @@ -99,7 +99,7 @@ priv_t *priv; sh->context=priv=new(zeromem) priv_t; if(!(handle = dlopen (sh->codec->dll_name, RTLD_LAZY))) { - mp_free(sh->context); + delete sh->context; return MPXP_False; } @@ -117,7 +117,7 @@ if(!raCloseCodec || !raDecode || !raFreeDecoder || !raGetFlavorProperty || !(raOpenCodec2||raOpenCodec) || !raSetFlavor || !raInitDecoder){ - mp_free(sh->context); + delete sh->context; return MPXP_False; } @@ -134,7 +134,7 @@ path[strlen(path)+1]=0; if(raSetDLLAccessPath) - raSetDLLAccessPath(uint32_t(path)); + raSetDLLAccessPath(long(path)); if(raOpenCodec2) { strcat(cpath,"/"); @@ -143,7 +143,7 @@ else result=raOpenCodec(&priv->internal); if(result){ MSG_WARN("Decoder open failed, error code: 0x%X\n",result); - mp_free(sh->context); + delete sh->context; return MPXP_False; } @@ -164,7 +164,7 @@ result=raInitDecoder(priv->internal,&init_data); if(result){ MSG_WARN("Decoder init failed, error code: 0x%X\n",result); - mp_free(sh->context); + delete sh->context; return MPXP_False; } @@ -176,7 +176,7 @@ result=raSetFlavor(priv->internal,((short*)(sh->wf+1))[2]); if(result){ MSG_WARN("Decoder flavor setup failed, error code: 0x%X\n",result); - mp_free(sh->context); + delete sh->context; return MPXP_False; } @@ -208,9 +208,9 @@ static void uninit(sh_audio_t *sh){ // uninit the decoder etc... priv_t *priv = reinterpret_cast<priv_t*>(sh->context); - if (raFreeDecoder) raFreeDecoder(uint32_t(priv->internal)); - if (raCloseCodec) raCloseCodec(uint32_t(priv->internal)); - mp_free(sh->context); + if (raFreeDecoder) raFreeDecoder(long(priv->internal)); + if (raCloseCodec) raCloseCodec(long(priv->internal)); + delete sh->context; } static const unsigned char sipr_swaps[38][2]={ Modified: mplayerxp/libmpcodecs/ad_twin.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_twin.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_twin.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -332,7 +332,7 @@ void uninit(sh_audio_t *sh) { close_vqf_audio_codec(sh); - mp_free(sh->context); + delete sh->context; FreeLibrary(vqf_dll); } Modified: mplayerxp/libmpcodecs/ad_vorbis.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_vorbis.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/ad_vorbis.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -74,7 +74,7 @@ /// Header if(vorbis_synthesis_headerin(&priv->vi,&vc,&op) <0) { MSG_ERR("OggVorbis: initial (identification) header broken!\n"); - mp_free(priv); + delete priv; return MPXP_False; } op.bytes = ds_get_packet_r(sh->ds,&op.packet,&pts); @@ -82,14 +82,14 @@ /// Comments if(vorbis_synthesis_headerin(&priv->vi,&vc,&op) <0) { MSG_ERR("OggVorbis: comment header broken!\n"); - mp_free(priv); + delete priv; return MPXP_False; } op.bytes = ds_get_packet_r(sh->ds,&op.packet,&pts); //// Codebook if(vorbis_synthesis_headerin(&priv->vi,&vc,&op)<0) { MSG_WARN("OggVorbis: codebook header broken!\n"); - mp_free(priv); + delete priv; return MPXP_False; } else { /// Print the infos char **ptr=vc.user_comments; @@ -131,7 +131,7 @@ static void uninit(sh_audio_t *sh) { - mp_free(sh->context); + delete sh->context; } static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) Modified: mplayerxp/libmpcodecs/libdca/parse.cpp =================================================================== --- mplayerxp/libmpcodecs/libdca/parse.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/libdca/parse.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -85,7 +85,7 @@ state->samples = (sample_t *) mp_memalign (16, 256 * 12 * sizeof (sample_t)); if (state->samples == NULL) { - mp_free (state); + delete state; return NULL; } @@ -1294,6 +1294,6 @@ void dca_free (dca_state_t * state) { - mp_free (state->samples); - mp_free (state); + delete state->samples; + delete state; } Modified: mplayerxp/libmpcodecs/vd_divx4.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_divx4.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_divx4.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -252,7 +252,7 @@ priv_t*p=reinterpret_cast<priv_t*>(sh->context); p->decoder(p->pHandle, DEC_OPT_RELEASE, 0, 0); dlclose(dll_handle); - mp_free(p); + delete p; } // decode a frame Modified: mplayerxp/libmpcodecs/vd_ffmpeg.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_ffmpeg.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_ffmpeg.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -434,11 +434,11 @@ if (avcodec_close(priv->ctx) < 0) MSG_ERR( MSGTR_CantCloseCodec); if (priv->ctx->extradata_size) - mp_free(priv->ctx->extradata); - mp_free(priv->ctx); - mp_free(priv->lavc_picture); + delete priv->ctx->extradata; + delete priv->ctx; + delete priv->lavc_picture; if(priv->probe) { delete priv->probe->codec_dll; delete priv->probe; } - mp_free(priv); + delete priv; if(ppContext) pp_free_context(ppContext); ppContext=NULL; pp2_uninit(); @@ -549,7 +549,7 @@ } if(mpi) { - if(mpi->bpp == 8 && mpi->planes[1]) mp_free(mpi->planes[1]); + if(mpi->bpp == 8 && mpi->planes[1]) delete mpi->planes[1]; if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK) free_mp_image(mpi); } Modified: mplayerxp/libmpcodecs/vd_huffyuv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -349,10 +349,10 @@ { if (sh->context) { if (((priv_t*)&sh->context)->abovebuf1) - mp_free(((priv_t*)sh->context)->abovebuf1); + delete ((priv_t*)sh->context)->abovebuf1; if (((priv_t*)&sh->context)->abovebuf2) - mp_free(((priv_t*)sh->context)->abovebuf2); - mp_free(sh->context); + delete ((priv_t*)sh->context)->abovebuf2; + delete sh->context; } } Modified: mplayerxp/libmpcodecs/vd_libmpeg2.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -268,7 +268,7 @@ static void uninit(sh_video_t *sh){ priv_t *priv=reinterpret_cast<priv_t*>(sh->context); mpeg2_close(priv->mpeg2dec); - mp_free(priv); + delete priv; dlclose(dll_handle); } Modified: mplayerxp/libmpcodecs/vd_real.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_real.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_real.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -84,7 +84,7 @@ } void __builtin_vec_delete(any_t*mem) { - mp_free(mem); + delete mem; } void __pure_virtual(void) Modified: mplayerxp/libmpcodecs/vd_theora.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_theora.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_theora.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -113,7 +113,7 @@ if (failed) { if (priv) { - mp_free (priv); + delete priv; sh->context = NULL; } return MPXP_False; @@ -137,7 +137,7 @@ priv_t *priv = (priv_t *)sh->context; if (priv) { theora_clear (&priv->st); - mp_free (priv); + delete priv; } } Modified: mplayerxp/libmpcodecs/vd_vfw.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -266,8 +266,8 @@ { priv_t *priv=reinterpret_cast<priv_t*>(sh->context); vfw_close_video_codec(sh); - mp_free(priv->o_bih); - mp_free(sh->context); + delete priv->o_bih; + delete sh->context; } // decode a frame Modified: mplayerxp/libmpcodecs/vd_xanim.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_xanim.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpcodecs/vd_xanim.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -446,7 +446,7 @@ if (xacodec_query(xacodec_driver, &codec_hdr) == 0) return(0); -// mp_free(codec_hdr.anim_hdr); +// delete codec_hdr.anim_hdr; xacodec_driver->decinfo = new(zeromem) XA_DEC_INFO; if (xacodec_driver->decinfo == NULL) { @@ -584,8 +584,8 @@ } dlclose(xacodec_driver->file_handler); if (xacodec_driver->decinfo != NULL) - mp_free(xacodec_driver->decinfo); - mp_free(xacodec_driver); + delete xacodec_driver->decinfo; + delete xacodec_driver; return(TRUE); } Modified: mplayerxp/libmpconf/codec-cfg.cpp =================================================================== --- mplayerxp/libmpconf/codec-cfg.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpconf/codec-cfg.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -276,7 +276,7 @@ if (i < strlen(tmp_name)) { MSG_ERR("\ncodec(%s) name is not valid!\n", c->codec_name); - mp_free(tmp_name); + delete tmp_name; return 0; } @@ -284,7 +284,7 @@ strncpy(c->s_info,c->codec_name,sizeof(c->s_info)); c->s_info[sizeof(c->s_info)-1]=0; } - mp_free(tmp_name); + delete tmp_name; return 1; } @@ -388,8 +388,8 @@ static int nr_acodecs = 0; void free_codec_cfg(void) { - if(video_codecs) mp_free(video_codecs); - if(audio_codecs) mp_free(audio_codecs); + if(video_codecs) delete video_codecs; + if(audio_codecs) delete audio_codecs; } int parse_codec_cfg(const char *cfgfile) @@ -403,10 +403,10 @@ int tmp, i; // in case we call it secont time - if(video_codecs!=NULL)mp_free(video_codecs); + if(video_codecs!=NULL)delete video_codecs; else video_codecs=NULL; - if(audio_codecs!=NULL)mp_free(audio_codecs); + if(audio_codecs!=NULL)delete audio_codecs; else audio_codecs=NULL; nr_vcodecs = 0; @@ -617,7 +617,7 @@ if(video_codecs) video_codecs[nr_vcodecs].codec_name[0] = '\0'; if(audio_codecs) audio_codecs[nr_acodecs].codec_name[0] = '\0'; out: - mp_free(line); + delete line; line=NULL; fclose(fp); return 1; @@ -629,13 +629,13 @@ PRINT_LINENUM; err_out: if (audio_codecs) - mp_free(audio_codecs); + delete audio_codecs; if (video_codecs) - mp_free(video_codecs); + delete video_codecs; video_codecs=NULL; audio_codecs=NULL; - mp_free(line); + delete line; line=NULL; fclose(fp); return 0; Modified: mplayerxp/libmpconf/m_option.cpp =================================================================== --- mplayerxp/libmpconf/m_option.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpconf/m_option.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -366,7 +366,7 @@ if(dst) { if(VAL(dst)) - mp_free(VAL(dst)); + delete VAL(dst); VAL(dst) = mp_strdup(param); } @@ -384,7 +384,7 @@ UNUSED(opt); if(dst && src) { #ifndef NO_FREE - if(VAL(dst)) mp_free(VAL(dst)); //FIXME!!! + if(VAL(dst)) delete VAL(dst); //FIXME!!! #endif VAL(dst) = VAL(src) ? mp_strdup(VAL(src)) : NULL; } @@ -393,7 +393,7 @@ static void free_str(any_t* src) { if(src && VAL(src)){ #ifndef NO_FREE - mp_free(VAL(src)); //FIXME!!! + delete VAL(src); //FIXME!!! #endif VAL(src) = NULL; } @@ -434,8 +434,8 @@ // FIXME!!! #ifndef NO_FREE for(i = 0 ; d[i] != NULL ; i++) - mp_free(d[i]); - mp_free(d); + delete d[i]; + delete d; #endif VAL(dst) = NULL; } @@ -458,7 +458,7 @@ } else memcpy(&lst[ln],add,(n+1)*sizeof(char*)); - mp_free(add); + delete add; VAL(dst) = lst; @@ -481,23 +481,23 @@ idx = strtol(del[i], &ep, 0); if(*ep) { MSG_ERR("Invalid index: %s\n",del[i]); - mp_free(del[i]); + delete del[i]; continue; } - mp_free(del[i]); + delete del[i]; if(idx < 0 || idx >= ln) { MSG_ERR("Index %ld is out of range.\n",idx); continue; } else if(!lst[idx]) continue; - mp_free(lst[idx]); + delete lst[idx]; lst[idx] = NULL; s--; } - mp_free(del); + delete del; if(s == 0) { - if(lst) mp_free(lst); + if(lst) delete lst; VAL(dst) = NULL; return 1; } @@ -510,7 +510,7 @@ } d[s] = NULL; - if(lst) mp_free(lst); + if(lst) delete lst; VAL(dst) = d; return 1; @@ -599,7 +599,7 @@ n++; } res[n] = NULL; - mp_free(str); + delete str; switch(op) { case OP_ADD: @@ -654,12 +654,12 @@ for(i = 0 ; lst[i] ; i++) { if(last) { ret = dup_printf("%s,%s",last,lst[i]); - mp_free(last); + delete last; } else ret = mp_strdup(lst[i]); last = ret; } - if(last && last != ret) mp_free(last); + if(last && last != ret) delete last; return ret; } @@ -844,8 +844,8 @@ } } - mp_free(subparam); - mp_free(subopt); + delete subparam; + delete subopt; if(dst) VAL(dst) = lst; @@ -1354,12 +1354,12 @@ // We need the object desc if(!p) { - mp_free(cpy); + delete cpy; return M_OPT_INVALID; } desc = p->desc; r = get_obj_params(name,desc->name,cpy,desc,p->separator,dst ? &opts : NULL); - mp_free(cpy); + delete cpy; if(r < 0) return r; if(!dst) @@ -1607,7 +1607,7 @@ if(!ptr) { r = parse_obj_settings(name,last_ptr,mobjl,dst ? &res : NULL,n); if(r < 0) { - mp_free(str); + delete str; return r; } n++; @@ -1616,13 +1616,13 @@ ptr[0] = '\0'; r = parse_obj_settings(name,last_ptr,mobjl,dst ? &res : NULL,n); if(r < 0) { - mp_free(str); + delete str; return r; } ptr++; n++; } - mp_free(str); + delete str; if(n == 0) return M_OPT_INVALID; @@ -1638,7 +1638,7 @@ res = (m_obj_settings_t*)mp_realloc(res,(qsize+n+1)*sizeof(m_obj_settings_t)); memcpy(&res[n],queue,(qsize+1)*sizeof(m_obj_settings_t)); n += qsize; - mp_free(queue); + delete queue; } if(head) { int hsize; @@ -1646,7 +1646,7 @@ /* NOP */; head = (m_obj_settings_t*)mp_realloc(head,(hsize+n+1)*sizeof(m_obj_settings_t)); memcpy(&head[hsize],res,(n+1)*sizeof(m_obj_settings_t)); - mp_free(res); + delete res; res = head; } VAL(dst) = res; @@ -1666,7 +1666,7 @@ delete d[n].name; free_str_list(&(d[n].attribs)); } - mp_free(d); + delete d; #endif VAL(dst) = NULL; } @@ -1967,7 +1967,7 @@ } r = m_struct_set(desc,dst,"filename",fname); if(fname != ptr2+1) - mp_free(fname); + delete fname; if(r < 0) { MSG_ERR("Option %s: Error while setting filename.\n",name); return r; Modified: mplayerxp/libmpconf/m_property.cpp =================================================================== --- mplayerxp/libmpconf/m_property.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpconf/m_property.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -69,12 +69,12 @@ return r; val = mp_calloc(1,opt->type->size); if((r = do_action(prop_list,name,M_PROPERTY_GET,val,ctx)) <= 0) { - mp_free(val); + delete val; return r; } if(!arg) return M_PROPERTY_ERROR; str = m_option_print(opt,val); - mp_free(val); + delete val; *(char**)arg = str == (char*)-1 ? NULL : str; return str != (char*)-1; case M_PROPERTY_PARSE: @@ -88,12 +88,12 @@ if(!arg) return M_PROPERTY_ERROR; val = mp_calloc(1,opt->type->size); if((r = m_option_parse(opt,opt->name,(char *)arg,val,M_CONFIG_FILE)) <= 0) { - mp_free(val); + delete val; return r; } r = do_action(prop_list,name,M_PROPERTY_SET,val,ctx); m_option_free(opt,val); - mp_free(val); + delete val; return r; } return do_action(prop_list,name,action,arg,ctx); Modified: mplayerxp/libmpconf/m_struct.cpp =================================================================== --- mplayerxp/libmpconf/m_struct.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpconf/m_struct.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -99,7 +99,7 @@ for(i = 0 ; st->fields[i].name ; i++) m_option_free(&st->fields[i],M_ST_MB_P(obj,st->fields[i].p)); - mp_free(obj); + delete obj; } any_t* Modified: mplayerxp/libmpconf/subopt-helper.cpp =================================================================== --- mplayerxp/libmpconf/subopt-helper.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpconf/subopt-helper.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -150,7 +150,7 @@ tmp.len = 0; last = parse_str( &str[parse_pos], &tmp ); if (*valp) - mp_free(*valp); + delete *valp; *valp = NULL; if (tmp.str && tmp.len > 0) { *valp = new char [tmp.len + 1]; Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -213,7 +213,7 @@ static void aiff_close(demuxer_t* demuxer) { - mp_free(demuxer->priv); + delete demuxer->priv; } static MPXP_Rc aiff_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -130,17 +130,17 @@ le2me_ASF_header_t(&apriv->asfh); // swap to machine endian if(memcmp(asf2hdrguid,apriv->asfh.objh.guid,16)==0){ MSG_ERR("ASF_check: found ASF v2 guid!\nCurrently is not supported - please report!\n"); - mp_free(demuxer->priv); + delete demuxer->priv; return MPXP_False; // not ASF guid } if(memcmp(asfhdrguid,apriv->asfh.objh.guid,16)){ MSG_V("ASF_check: not ASF guid!\n"); - mp_free(demuxer->priv); + delete demuxer->priv; return MPXP_False; // not ASF guid } if(apriv->asfh.cno>256){ MSG_V("ASF_check: invalid subchunks_no %d\n",(int) apriv->asfh.cno); - mp_free(demuxer->priv); + delete demuxer->priv; return MPXP_False; // invalid header??? } demuxer->file_format=DEMUXER_TYPE_ASF; @@ -275,7 +275,7 @@ demux_info_add(demuxer, INFOT_RATING, string); } MSG_V("\n"); - mp_free(string); + delete string; break; } case ASF_GUID_PREFIX_stream_group: { @@ -287,7 +287,7 @@ object = (char*)mp_malloc(apriv->objh.size); if( object==NULL ) { MSG_ERR("Memory allocation failed\n"); - mp_free(demuxer->priv); + delete demuxer->priv; return NULL; } stream_read( demuxer->stream, object, apriv->objh.size ); @@ -310,7 +310,7 @@ streams[2*i+1] = max_bitrate; } MSG_V("============ ASF Stream group == END ===\n"); - mp_free( object ); + delete object ; break; } } // switch GUID @@ -341,7 +341,7 @@ best_audio = id; } } - mp_free(streams); + delete streams; } MSG_V("ASF: %d audio and %d video streams found\n",audio_streams,video_streams); @@ -350,7 +350,7 @@ if(!video_streams){ if(!audio_streams){ MSG_ERR("ASF: no audio or video headers found - broken file?\n"); - mp_free(demuxer->priv); + delete demuxer->priv; return NULL; } demuxer->video->id=-2; // audio-only @@ -407,7 +407,7 @@ s2+=apriv->asf_scrambling_h*apriv->asf_scrambling_w*apriv->asf_scrambling_b; } memcpy(src,dst,i); - mp_free(dst); + delete dst; } @@ -710,7 +710,7 @@ static void asf_close(demuxer_t *demuxer) { - mp_free(demuxer->priv); + delete demuxer->priv; } static MPXP_Rc asf_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -1770,7 +1770,7 @@ if(!priv) return; - mp_free(priv); + delete priv; } static MPXP_Rc audio_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -394,7 +394,7 @@ sh_video->aspect = GET_AVI_ASPECT(vprp->dwFrameAspectRatio); } if(mp_conf.verbose>=1) print_vprp(vprp); - mp_free(vprp); + delete vprp; break; } case mmioFOURCC('d', 'm', 'l', 'h'): { @@ -497,7 +497,7 @@ AVIINDEXENTRY *idx; - if (priv->idx_size) mp_free(priv->idx); + if (priv->idx_size) delete priv->idx; priv->idx_size = 0; priv->idx_offset = 0; priv->idx = NULL; @@ -606,11 +606,11 @@ cx = &priv->suidx[0]; do { for (j=0;j<cx->nEntriesInUse;j++) - if (cx->stdidx[j].nEntriesInUse) mp_free(cx->stdidx[j].aIndex); - mp_free(cx->stdidx); + if (cx->stdidx[j].nEntriesInUse) delete cx->stdidx[j].aIndex; + delete cx->stdidx; } while (cx++ != &priv->suidx[priv->suidx_size-1]); - mp_free(priv->suidx); + delete priv->suidx; } /* Read a saved index file */ @@ -643,7 +643,7 @@ fread(idx, sizeof(AVIINDEXENTRY), 1, fp); if (feof(fp)) { MSG_ERR(MSGTR_MPDEMUX_AVIHDR_PrematureEOF, index_file_load); - mp_free(priv->idx); + delete priv->idx; priv->idx_size = 0; goto gen_index; } @@ -1533,8 +1533,8 @@ if(!priv) return; - if(priv->idx_size > 0) mp_free(priv->idx); - mp_free(priv); + if(priv->idx_size > 0) delete priv->idx; + delete priv; } static MPXP_Rc avi_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -293,7 +293,7 @@ if(!bmp_image) return; - mp_free(bmp_image); + delete bmp_image; } #endif Modified: mplayerxp/libmpdemux/demux_demuxers.cpp =================================================================== --- mplayerxp/libmpdemux/demux_demuxers.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_demuxers.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -94,7 +94,7 @@ if(priv->sd && priv->sd != priv->vd && priv->sd != priv->ad) FREE_DEMUXER(priv->sd); - mp_free(priv); + delete priv; demux_info_free(demuxer); - mp_free(demuxer); + delete demuxer; } Modified: mplayerxp/libmpdemux/demux_dv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_dv.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_dv.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -230,7 +230,7 @@ if(frames==0) return; - mp_free(frames); + delete frames; } static MPXP_Rc dv_control(const demuxer_t *demuxer,int cmd, any_t*arg) { Modified: mplayerxp/libmpdemux/demux_film.cpp =================================================================== --- mplayerxp/libmpdemux/demux_film.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_film.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -226,7 +226,7 @@ if (chunk_type != CHUNK_FILM) { MSG_ERR( "Not a FILM file\n"); - mp_free(film_data); + delete film_data; return NULL; } @@ -431,8 +431,8 @@ if(!film_data) return; if(film_data->chunks) - mp_free(film_data->chunks); - mp_free(film_data); + delete film_data->chunks; + delete film_data; } Modified: mplayerxp/libmpdemux/demux_fli.cpp =================================================================== --- mplayerxp/libmpdemux/demux_fli.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_fli.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -100,8 +100,8 @@ { MSG_ERR("Bad/unknown magic number (%04x)\n", magic_number); - mp_free(header); - mp_free(frames); + delete header; + delete frames; return(NULL); } @@ -184,11 +184,11 @@ return; if(frames->filepos) - mp_free(frames->filepos); + delete frames->filepos; if(frames->frame_size) - mp_free(frames->frame_size); + delete frames->frame_size; - mp_free(frames); + delete frames; } static MPXP_Rc fli_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -181,7 +181,7 @@ else av_log_set_level(AV_LOG_INFO); if(stream_read(demuxer->stream, buf, PROBE_BUF_SIZE)!=PROBE_BUF_SIZE) { - mp_free(demuxer->priv); + delete demuxer->priv; return MPXP_False; } avpd.filename= "xxx"; @@ -204,7 +204,7 @@ priv->avif= av_probe_input_format(&avpd, 1); if(!priv->avif){ MSG_V("LAVF_check: file format not recognized!\n"); - mp_free(demuxer->priv); + delete demuxer->priv; return MPXP_False; }else MSG_V("LAVF_check: %s\n", priv->avif->long_name); @@ -489,7 +489,7 @@ avformat_close_input(&priv->avfc); } av_freep(&priv->pb); - mp_free(priv); demuxer->priv= NULL; + delete priv; demuxer->priv= NULL; } } Modified: mplayerxp/libmpdemux/demux_mkv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mkv.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_mkv.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -321,7 +321,7 @@ str = (char *) mp_malloc (len+1); if (stream_read(s, str, len) != (int) len) { - mp_free (str); + delete str; return NULL; } str[len] = '\0'; @@ -853,7 +853,7 @@ track = mkv_d->tracks[k]; for (i = 0; i < track->num_cached_dps; i++) free_demux_packet (track->cached_dps[i]); - mp_free(track->cached_dps); + delete track->cached_dps; track->cached_dps = NULL; track->num_cached_dps = 0; track->num_allocated_dps = 0; @@ -912,7 +912,7 @@ } while (!last && (*start != 0)); - mp_free(buf); + delete buf; return (things_found & 3) == 3; } @@ -962,7 +962,7 @@ if (result != Z_OK && result != Z_STREAM_END) { MSG_WARN("[mkv] zlib decompression failed.\n"); - mp_free(*dest); + delete *dest; *dest = NULL; inflateEnd (&zstream); return modified; @@ -993,7 +993,7 @@ { lzo_fail: MSG_WARN("[mkv] zlib decompression failed.\n"); - mp_free(*dest); + delete *dest; *dest = NULL; return modified; } @@ -1064,8 +1064,8 @@ demux_mkv_free_encodings(mkv_content_encoding_t *encodings, int numencodings) { while (numencodings-- > 0) - mp_free(encodings[numencodings].comp_settings); - mp_free(encodings); + delete encodings[numencodings].comp_settings; + delete encodings; } static int @@ -1364,23 +1364,23 @@ static void demux_mkv_free_trackentry(mkv_track_t *track) { if (track->name) - mp_free (track->name); + delete track->name; if (track->codec_id) - mp_free (track->codec_id); + delete track->codec_id; if (track->language) - mp_free (track->language); + delete track->language; if (track->private_data) - mp_free (track->private_data); + delete track->private_data; if (track->audio_buf) - mp_free (track->audio_buf); + delete track->audio_buf; if (track->audio_timestamp) - mp_free (track->audio_timestamp); + delete track->audio_timestamp; #ifdef USE_ASS if (track->sh_sub && track->sh_sub->ass_track) ass_free_track (track->sh_sub->ass_track); #endif demux_mkv_free_encodings(track->encodings, track->num_encodings); - mp_free(track); + delete track; } static int @@ -1507,7 +1507,7 @@ } case MATROSKA_ID_TRACKLANGUAGE: - mp_free(track->language); + delete track->language; track->language = ebml_read_utf8 (s, &l); if (track->language == NULL) goto err_out; @@ -1827,7 +1827,7 @@ (int) ((end / 1000) % 60), (int) (end % 1000), name); - mp_free(name); + delete name; break; } @@ -1924,11 +1924,11 @@ int x; uint64_t num = ebml_read_length (s, &x); l = x + num; - mp_free(data); + delete data; data = new char [num]; if (stream_read(s, data, num) != (int) num) { - mp_free(data); + delete data; return 0; } data_size = num; @@ -2291,7 +2291,7 @@ if (!vi->id) { MSG_WARN( "[mkv] Unknown/unsupported CodecID (%s) or missing/bad CodecPrivate\n[mkv] data (track %u).\n", track->codec_id, track->tnum); - mp_free(bih); + delete bih; return 1; } } @@ -2451,7 +2451,7 @@ else if ((track->a_formattag == 0x2000) || /* AC3 */ (track->a_formattag == 0x2001)) /* DTS */ { - mp_free(sh_a->wf); + delete sh_a->wf; sh_a->wf = NULL; } else if (track->a_formattag == 0x0001) /* PCM || PCM_BE */ @@ -2604,7 +2604,7 @@ { unsigned char *ptr; int size; - mp_free(sh_a->wf); + delete sh_a->wf; sh_a->wf = NULL; if (track->a_formattag == mmioFOURCC('f', 'L', 'a', 'C')) @@ -2675,13 +2675,13 @@ m = demux_mkv_decode (track,reinterpret_cast<uint8_t*>(track->private_data),&buffer,&size,2); if (buffer && m) { - mp_free (track->private_data); + delete track->private_data; track->private_data = buffer; track->private_size = size; } if (!demux_mkv_parse_idx (track)) { - mp_free (track->private_data); + delete track->private_data; track->private_data = NULL; track->private_size = 0; } @@ -2719,7 +2719,7 @@ m = demux_mkv_decode (track,track->private_data,&buffer,&size,2); if (buffer && m) { - mp_free (track->private_data); + delete track->private_data; track->private_data = buffer; track->private_size = size; } @@ -2785,7 +2785,7 @@ MSG_DBG2( "[mkv] no head found\n"); return MPXP_False; } - mp_free (str); + delete str; return MPXP_Ok; } @@ -2803,7 +2803,7 @@ MSG_DBG2( "[mkv] no head found\n"); return 0; } - mp_free (str); + delete str; MSG_V( "[mkv] Found the head...\n"); @@ -3069,28 +3069,28 @@ { for (i=0; i<mkv_d->num_tracks; i++) demux_mkv_free_trackentry(mkv_d->tracks[i]); - mp_free (mkv_d->tracks); + delete mkv_d->tracks; } if (mkv_d->indexes) - mp_free (mkv_d->indexes); + delete mkv_d->indexes; if (mkv_d->cluster_positions) - mp_free (mkv_d->cluster_positions); + delete mkv_d->cluster_positions; if (mkv_d->parsed_cues) - mp_free (mkv_d->parsed_cues); + delete mkv_d->parsed_cues; if (mkv_d->parsed_seekhead) - mp_free (mkv_d->parsed_seekhead); + delete mkv_d->parsed_seekhead; if (mkv_d->attachments) { for (i = 0; i < mkv_d->num_attachments; ++i) { if (mkv_d->attachments[i].name) - mp_free (mkv_d->attachments[i].name); + delete mkv_d->attachments[i].name; if (mkv_d->attachments[i].mime) - mp_free (mkv_d->attachments[i].mime); + delete mkv_d->attachments[i].mime; if (mkv_d->attachments[i].data) - mp_free (mkv_d->attachments[i].data); + delete mkv_d->attachments[i].data; } - mp_free (mkv_d->attachments); + delete mkv_d->attachments; } - mp_free (mkv_d); + delete mkv_d; } } @@ -3150,7 +3150,7 @@ int l; uint64_t num = ebml_read_vlen_uint (buffer, &l); if (num == EBML_UINT_INVALID) { - mp_free(lace_size); + delete lace_size; return 1; } buffer += l; @@ -3162,7 +3162,7 @@ int64_t snum; snum = ebml_read_vlen_int (buffer, &l); if (snum == EBML_INT_INVALID) { - mp_free(lace_size); + delete lace_size; return 1; } buffer += l; @@ -3551,7 +3551,7 @@ if (tc < 0) tc = 0; if (mkv_d->stop_timecode > 0 && tc > mkv_d->stop_timecode) { - mp_free(lace_size); + delete lace_size; return -1; } current_pts = tc / 1000.0; @@ -3563,7 +3563,7 @@ } if (track == NULL) { - mp_free(lace_size); + delete lace_size; return 1; } if (num == demuxer->audio->id) @@ -3657,7 +3657,7 @@ dp = new_demux_packet (size); memcpy (dp->buffer, buffer, size); if (modified) - mp_free (buffer); + delete buffer; dp->flags = (block_bref == 0 && block_fref == 0) ? 0x10 : 0; /* If default_duration is 0, assume no pts value is known * for packets after the first one (rather than all pts @@ -3678,11 +3678,11 @@ else if (ds == demuxer->audio) mkv_d->a_skip_to_keyframe = 0; - mp_free(lace_size); + delete lace_size; return 1; } - mp_free(lace_size); + delete lace_size; return 0; } @@ -3710,7 +3710,7 @@ { block_duration = ebml_read_uint (s, &l); if (block_duration == EBML_UINT_INVALID) { - mp_free(block); + delete block; return 0; } block_duration *= mkv_d->tc_scale / 1000000.0; @@ -3719,13 +3719,13 @@ case MATROSKA_ID_BLOCK: block_length = ebml_read_length (s, &tmp); - mp_free(block); + delete block; if (block_length > std::numeric_limits<size_t>::max()- LZO_INPUT_PADDING) return 0; block = new uint8_t[block_length + LZO_INPUT_PADDING]; demuxer->filepos = stream_tell (s); if (stream_read (s,block,block_length) != (int) block_length) { - mp_free(block); + delete block; return 0; } l = tmp + block_length; @@ -3735,7 +3735,7 @@ { int64_t num = ebml_read_int (s, &l); if (num == EBML_INT_INVALID) { - mp_free(block); + delete block; return 0; } if (num <= 0) @@ -3746,7 +3746,7 @@ } case EBML_ID_INVALID: - mp_free(block); + delete block; return 0; default: @@ -3761,7 +3761,7 @@ { int res = handle_block (demuxer, block, block_length, block_duration, block_bref, block_fref, 0); - mp_free (block); + delete block; if (res < 0) return 0; if (res) @@ -3799,13 +3799,13 @@ demuxer->filepos = stream_tell (s); if (stream_read (s,block,block_length) != (int) block_length) { - mp_free(block); + delete block; return 0; } l = tmp + block_length; res = handle_block (demuxer, block, block_length, block_duration, block_bref, block_fref, 1); - mp_free (block); + delete block; mkv_d->cluster_size -= l + il; if (res < 0) return 0; Modified: mplayerxp/libmpdemux/demux_mov.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mov.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_mov.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -487,7 +487,7 @@ /* dunno what, but we shoudl ignore it */ break; default: - if(no==0){ mp_free(priv); return MPXP_False;} // first chunk is bad! + if(no==0){ delete priv; return MPXP_False;} // first chunk is bad! id = BE_32(id); MSG_V("MOV: unknown chunk: %.4s %d\n",&id,(int)len); } @@ -501,7 +501,7 @@ demuxer->file_format=DEMUXER_TYPE_MOV; return MPXP_Ok; } - mp_free(priv); + delete priv; if ((flags==5) || (flags==7)) // reference & header sent { @@ -1236,7 +1236,7 @@ sh->bih=(BITMAPINFOHEADER*)mp_mallocz(sizeof(BITMAPINFOHEADER) + trak->stream_header_len); sh->bih->biSize=40 + trak->stream_header_len; memcpy(((unsigned char *)sh->bih)+40, trak->stream_header, trak->stream_header_len); - mp_free (trak->stream_header); + delete trak->stream_header; trak->stream_header_len = 0; trak->stream_header = NULL; } else { @@ -1342,8 +1342,8 @@ lschunks(demuxer,level+1,moov_sz,NULL); // parse uncompr. 'moov' //free_stream(demuxer->stream); demuxer->stream=backup; - mp_free(cmov_buf); - mp_free(moov_buf); + delete cmov_buf; + delete moov_buf; break; } #endif @@ -1537,7 +1537,7 @@ str[_len] = 0; MSG_V( "MOV: %*sHandler header: %.4s/%.4s (%.4s) %s\n", level, "", &type, &subtype, &manufact, str); - mp_free(str); + delete str; switch(bswap_32(type)) { case MOV_FOURCC('m','h','l','r'): trak->media_handler = bswap_32(subtype); @@ -1987,7 +1987,7 @@ dp->pos=stream_tell(demuxer->stream)-trak->stream_header_len; x=stream_read(demuxer->stream,dp->buffer+trak->stream_header_len,x); resize_demux_packet(dp,x+trak->stream_header_len); - mp_free(trak->stream_header); + delete trak->stream_header; trak->stream_header = NULL; trak->stream_header_len = 0; dp->pts=pts; @@ -2073,20 +2073,20 @@ for (i = 0; i < MOV_MAX_TRACKS; i++) { mov_track_t *track = priv->tracks[i]; if (track) { - mp_free(track->tkdata); - mp_free(track->stdata); - mp_free(track->stream_header); - mp_free(track->samples); - mp_free(track->chunks); - mp_free(track->chunkmap); - mp_free(track->durmap); - mp_free(track->keyframes); - mp_free(track->editlist); - mp_free(track->desc); - mp_free(track); + delete track->tkdata; + delete track->stdata; + delete track->stream_header; + delete track->samples; + delete track->chunks; + delete track->chunkmap; + delete track->durmap; + delete track->keyframes; + delete track->editlist; + delete track->desc; + delete track; } } - mp_free(priv); + delete priv; } static MPXP_Rc mov_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -807,7 +807,7 @@ static void mpgps_close(demuxer_t*demuxer) { mpg_demuxer_t* mpg_d = reinterpret_cast<mpg_demuxer_t*>(demuxer->priv); - if (mpg_d) mp_free(mpg_d); + if (mpg_d) delete mpg_d; } static MPXP_Rc mpgps_control(const demuxer_t *demuxer,int cmd,any_t*arg) Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -429,7 +429,7 @@ stream_read(s,str,len); sub_data.cp=nls_get_screen_cp(); demux_info_add(demuxer,infot,nls_recode2screen_cp(codepage,str,len)); - mp_free(str); + delete str; } else stream_skip(s,len); } @@ -483,7 +483,7 @@ { MSG_ERR("Size of FPRP(%u) != %u\n",fsize,sizeof(mpxpav64FileProperties_t)); open_failed: - mp_free(priv); + delete priv; return NULL; } stream_read(s,(char *)&priv->fprop,sizeof(mpxpav64FileProperties_t)); @@ -885,8 +885,8 @@ unsigned i; mpxpav64_priv_t* priv=reinterpret_cast<mpxpav64_priv_t*>(demuxer->priv); if(!priv) return; - for(i=0;i<MAX_AV_STREAMS;i++) if(priv->idx[i]!=NULL) mp_free(priv->idx[i]); - mp_free(priv); + for(i=0;i<MAX_AV_STREAMS;i++) if(priv->idx[i]!=NULL) delete priv->idx[i]; + delete priv; } static MPXP_Rc mpxpav64_control(const demuxer_t *demuxer,int cmd,any_t*args) Modified: mplayerxp/libmpdemux/demux_nsv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nsv.cpp 2012-11-22 10:19:50 UTC (rev 429) +++ mplayerxp/libmpdemux/demux_nsv.cpp 2012-11-22 12:22:07 UTC (rev 430) @@ -338,7 +338,7 @@ if(!priv) return; - mp_free(priv); + delete priv; } Modified: mplayerxp/libmpdemux/demux_nuv.cpp =================================================================... [truncated message content] |
From: <nic...@us...> - 2012-11-22 12:56:20
|
Revision: 431 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=431&view=rev Author: nickols_k Date: 2012-11-22 12:56:08 +0000 (Thu, 22 Nov 2012) Log Message: ----------- use new(alignmem,X) instead o mp_memalign + add some g++ related tests into configure Modified Paths: -------------- mplayerxp/configure mplayerxp/libmpcodecs/liba52/parse.cpp mplayerxp/libmpcodecs/libdca/parse.cpp mplayerxp/libmpdemux/video.cpp mplayerxp/libvo/sub.cpp mplayerxp/libvo/vosub_vidix.cpp mplayerxp/postproc/vf_noise.cpp mplayerxp/postproc/vf_smartblur.cpp mplayerxp/postproc/vf_unsharp.cpp mplayerxp/xmpcore/mp_image.cpp Modified: mplayerxp/configure =================================================================== --- mplayerxp/configure 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/configure 2012-11-22 12:56:08 UTC (rev 431) @@ -274,6 +274,35 @@ prefix="." fi +echocheck "whether the $cxx compiler works" +cat > $TMPC << EOF +#include <stdlib.h> +#include <malloc.h> +#include <new> + +typedef void any_t; +enum alignedmemory_t{ alignmem=0 }; +inline any_t* operator new(size_t size,const alignedmemory_t&,size_t boundary) { + return memalign(boundary,size); +} +inline any_t* operator new[](size_t size,const alignedmemory_t&,size_t boundary) { + return memalign(boundary,size); +} +inline void operator delete(any_t* p) { free(p); } + +namespace mpxp { + inline int funci(int i) { return i+2; } +} + +using namespace mpxp; +int main(void) { + char* cstr=new(alignmem,8) char [20]; + delete cstr; + return funci(2); +} +EOF +cxx_check || die "no" + echocheck "Program name" prog_alias=$program_transform_name prog_alias="$program_prefix$prog_alias$program_suffix" @@ -412,16 +441,6 @@ print_config HAVE_ mp_config.h mp_config.mak af_inet6 fi -check_func2 malloc.h malloc -freebsd && disable malloc -print_config HAVE_ mp_config.h mp_config.mak malloc -if enabled malloc; then -check_func2 malloc.h memalign -print_config HAVE_ mp_config.h mp_config.mak memalign -fi -check_func2 alloca.h alloca -print_config HAVE_ mp_config.h mp_config.mak alloca - # find if .align arg is power-of-two or not echocheck ".align is power-of-two" cat > $TMPC << EOF @@ -522,6 +541,17 @@ disabled pthread && die "Lib pthread not found. (needed by xp mode)" print_config HAVE_ mp_config.h mp_config.mak pthread +check_func2 malloc.h malloc +disabled malloc && die "malloc is not supported by your system" +print_config HAVE_ mp_config.h mp_config.mak malloc + +check_func2 malloc.h memalign +disabled memalign && die "memalign is not supported by your system" +print_config HAVE_ mp_config.h mp_config.mak memalign + +check_func2 alloca.h alloca +print_config HAVE_ mp_config.h mp_config.mak alloca + require2 sys_soundcard_h sys/soundcard.h SNDCARD_SB print_config HAVE_ mp_config.h mp_config.mak sys_soundcard_h require2 soundcard_h soundcard.h SNDCARD_SB @@ -951,11 +981,6 @@ /* set up audio OUTBURST. Do not change this! */ #define OUTBURST 512 -/* memalign is mapped to malloc if unsupported */ -#ifndef HAVE_MEMALIGN -# define memalign(a,b) malloc(b) -#endif - /* ASMALIGN */ $def_asmalign Modified: mplayerxp/libmpcodecs/liba52/parse.cpp =================================================================== --- mplayerxp/libmpcodecs/liba52/parse.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/libmpcodecs/liba52/parse.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -35,14 +35,6 @@ #include "bitstream.h" #include "tables.h" -#ifdef HAVE_MEMALIGN -/* some systems have mp_memalign() but no declaration for it */ -any_t* mp_memalign (size_t align, size_t size); -#else -/* assume mp_malloc alignment is sufficient */ -#define mp_memalign(align,size) mp_malloc (size) -#endif - typedef struct { sample_t q1[2]; sample_t q2[2]; @@ -66,7 +58,7 @@ if (state == NULL) return NULL; - state->samples = (sample_t*)mp_memalign (16, 256 * 12 * sizeof (sample_t)); + state->samples = new(alignmem,16) sample_t[256 * 12]; if (state->samples == NULL) { delete state; return NULL; Modified: mplayerxp/libmpcodecs/libdca/parse.cpp =================================================================== --- mplayerxp/libmpcodecs/libdca/parse.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/libmpcodecs/libdca/parse.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -48,14 +48,6 @@ /* #define LOG_DEBUG */ -#if defined(HAVE_MEMALIGN) && !defined(__cplusplus) -/* some systems have mp_memalign() but no declaration for it */ -any_t* mp_memalign (size_t align, size_t size); -#else -/* assume mp_malloc alignment is sufficient */ -#define mp_memalign(align,size) mp_malloc (size) -#endif - //#define LOG_DEBUG 1 static int decode_blockcode (int code, int levels, int *values); @@ -83,7 +75,7 @@ memset (state, 0, sizeof(dca_state_t)); - state->samples = (sample_t *) mp_memalign (16, 256 * 12 * sizeof (sample_t)); + state->samples = new(alignmem,16) sample_t[256 * 12]; if (state->samples == NULL) { delete state; return NULL; Modified: mplayerxp/libmpdemux/video.cpp =================================================================== --- mplayerxp/libmpdemux/video.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/libmpdemux/video.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -143,7 +143,7 @@ } } MSG_V("OK!\n"); - if(!videobuffer) videobuffer=(unsigned char*)mp_memalign(8,VIDEOBUFFER_SIZE); + if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; if(!videobuffer){ MSG_ERR(MSGTR_ShMemAllocFail); return 0; @@ -232,7 +232,7 @@ } } MSG_V("OK!\n"); - if(!videobuffer) videobuffer=(unsigned char*)mp_memalign(8,VIDEOBUFFER_SIZE); + if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; if(!videobuffer){ MSG_ERR(MSGTR_ShMemAllocFail); return 0; @@ -289,7 +289,7 @@ // sh_video=d_video->sh;sh_video->ds=d_video; // mpeg2_init(); // ========= Read & process sequence header & extension ============ - if(!videobuffer) videobuffer=(unsigned char*)mp_memalign(8,VIDEOBUFFER_SIZE); + if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; if(!videobuffer){ MSG_ERR(MSGTR_ShMemAllocFail); return 0; Modified: mplayerxp/libvo/sub.cpp =================================================================== --- mplayerxp/libvo/sub.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/libvo/sub.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -57,8 +57,8 @@ obj->allocated = len; delete obj->bitmap_buffer; delete obj->alpha_buffer; - obj->bitmap_buffer = (unsigned char *)mp_memalign(16, len); - obj->alpha_buffer = (unsigned char *)mp_memalign(16, len); + obj->bitmap_buffer = new(alignmem,16) unsigned char[len]; + obj->alpha_buffer = new(alignmem,16) unsigned char[len]; } memset(obj->bitmap_buffer, sub_data.bg_color, len); memset(obj->alpha_buffer, sub_data.bg_alpha, len); Modified: mplayerxp/libvo/vosub_vidix.cpp =================================================================== --- mplayerxp/libvo/vosub_vidix.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/libvo/vosub_vidix.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -397,7 +397,6 @@ MSG_V("using %d buffers\n", priv.vidix.playback.num_frames); /* configure busmastering */ if(vo_conf.use_bm) { -#ifdef HAVE_MEMALIGN if(priv.vidix.cap.flags & FLAG_DMA) { int psize = getpagesize(); priv.bm_locked=1; @@ -418,9 +417,6 @@ priv.bm_total_frames=priv.bm_slow_frames=0; } else -#else - MSG_ERR("Won't configure bus mastering: your system doesn't support mp_memalign()\n"); -#endif MSG_ERR("Can not configure bus mastering: your driver is not DMA capable\n"); vo_conf.use_bm = 0; } Modified: mplayerxp/postproc/vf_noise.cpp =================================================================== --- mplayerxp/postproc/vf_noise.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/postproc/vf_noise.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -74,7 +74,7 @@ int uniform= fp->uniform; int averaged= fp->averaged; int pattern= fp->pattern; - int8_t *noise= (int8_t*)mp_memalign(16, MAX_NOISE*sizeof(int8_t)); + int8_t *noise=new(alignmem,16) int8_t[MAX_NOISE]; int i, j; srand(123457); Modified: mplayerxp/postproc/vf_smartblur.cpp =================================================================== --- mplayerxp/postproc/vf_smartblur.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/postproc/vf_smartblur.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -195,7 +195,7 @@ SwsVector *vec; SwsFilter swsF; int i,x,y; - f->preFilterBuf= (uint8_t*)mp_memalign(8, stride*height); + f->preFilterBuf=new(alignmem,8) uint8_t[stride*height]; f->preFilterStride= stride; vec = sws_getGaussianVec(f->preFilterRadius, f->quality); @@ -219,7 +219,7 @@ vec = sws_getGaussianVec(f->radius, f->quality); f->distWidth= vec->length; f->distStride= (vec->length+7)&~7; - f->distCoeff= (int32_t*)mp_memalign(8, f->distWidth*f->distStride*sizeof(int32_t)); + f->distCoeff=new(alignmem,8) int32_t[f->distWidth*f->distStride]; for(y=0; y<vec->length; y++){ for(x=0; x<vec->length; x++){ Modified: mplayerxp/postproc/vf_unsharp.cpp =================================================================== --- mplayerxp/postproc/vf_unsharp.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/postproc/vf_unsharp.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -161,14 +161,14 @@ stepsX = fp->msizeX/2; stepsY = fp->msizeY/2; for( z=0; z<2*stepsY; z++ ) - fp->SC[z] = (uint32_t*)mp_memalign( 16, sizeof(*(fp->SC[z])) * (width+2*stepsX) ); + fp->SC[z] = new(alignmem,16) uint32_t[width+2*stepsX]; fp = &vf->priv->chromaParam; memset( fp->SC, 0, sizeof( fp->SC ) ); stepsX = fp->msizeX/2; stepsY = fp->msizeY/2; for( z=0; z<2*stepsY; z++ ) - fp->SC[z] = (uint32_t*)mp_memalign( 16, sizeof(*(fp->SC[z])) * (width+2*stepsX) ); + fp->SC[z] = new(alignmem,16) uint32_t[width+2*stepsX]; return vf_next_config( vf, width, height, d_width, d_height, flags, outfmt); } Modified: mplayerxp/xmpcore/mp_image.cpp =================================================================== --- mplayerxp/xmpcore/mp_image.cpp 2012-11-22 12:22:07 UTC (rev 430) +++ mplayerxp/xmpcore/mp_image.cpp 2012-11-22 12:56:08 UTC (rev 431) @@ -172,7 +172,7 @@ delta=0; // IF09 - allocate space for 4. plane delta info - unused if (mpi->imgfmt == IMGFMT_IF09) delta=mpi->chroma_width*mpi->chroma_height; - mpi->planes[0]=(unsigned char *)mp_memalign(64,size+delta); + mpi->planes[0]=new(alignmem,64) unsigned char[size+delta]; if(delta) /* delta table, just for fun ;) */ mpi->planes[3]=mpi->planes[0]+2*(mpi->chroma_width*mpi->chroma_height); if(mpi->flags&MP_IMGFLAG_PLANAR){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-22 17:26:45
|
Revision: 435 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=435&view=rev Author: nickols_k Date: 2012-11-22 17:26:39 +0000 (Thu, 22 Nov 2012) Log Message: ----------- minor fixes Modified Paths: -------------- mplayerxp/configure mplayerxp/libmpdemux/demux_bmp.cpp Modified: mplayerxp/configure =================================================================== --- mplayerxp/configure 2012-11-22 16:49:18 UTC (rev 434) +++ mplayerxp/configure 2012-11-22 17:26:39 UTC (rev 435) @@ -199,7 +199,6 @@ else test "${optval}" = "no" && action=disable fi - echo "$action ${thing}" $action ${thing} ;; @@ -642,8 +641,8 @@ enabled dga2 && enable dga disabled dga2 && require2 dga "X11/Xlib.h X11/extensions/xf86dga.h" XF86DGASetViewPort -lXxf86dga print_config HAVE_ mp_config.h mp_config.mak dga -enabled dga && vomodules="dga $vomodules" || novomodules="dga $novomodules" fi +enabled dga && vomodules="dga $vomodules" || novomodules="dga $novomodules" enabled fbdev && require2 fbdev "sys/ioctl.h linux/fb.h" ioctl print_config HAVE_ mp_config.h mp_config.mak fbdev @@ -679,7 +678,7 @@ # VIDEO + AUDIO # ################# -check_pkg sdl sdl +enabled sdl && check_pkg sdl sdl enabled sdl && require2 sdl SDL/SDL.h SDL_CreateYUVOverlay print_config HAVE_ mp_config.h mp_config.mak sdl if enabled sdl; then Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-22 16:49:18 UTC (rev 434) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-22 17:26:39 UTC (rev 435) @@ -17,12 +17,14 @@ #include "libvo/img_format.h" #include "osdep/fastmemcpy.h" +#include "osdep/mplib.h" #include "demux_msg.h" +using namespace mpxp; + #ifdef HAVE_SDL_IMAGE #include <SDL/SDL_image.h> -using namespace mpxp; static int demux_rw_seek(struct SDL_RWops *context, int offset, int whence) { @@ -205,12 +207,12 @@ } bmp_image_t; // Check if a file is a BMP file depending on whether starts with 'BM' -static int bmp_probe(demuxer_t *demuxer) +static MPXP_Rc bmp_probe(demuxer_t *demuxer) { if (stream_read_word(demuxer->stream) == (('B' << 8) | 'M')) - return 1; + return MPXP_Ok; else - return 0; + return MPXP_False; } // return value: @@ -218,7 +220,7 @@ // 1 = successfully read a packet static int bmp_demux(demuxer_t *demuxer,demux_stream_t *__ds) { - bmp_image_t *bmp_image = (bmp_image_t *)demuxer->priv; + bmp_image_t *bmp_image = reinterpret_cast<bmp_image_t*>(demuxer->priv); stream_reset(demuxer->stream); stream_seek(demuxer->stream, bmp_image->image_offset); @@ -271,7 +273,7 @@ sh_video->bih->biClrUsed * 4); // load the data - bmp_image = (bmp_image_t *)mp_malloc(sizeof(bmp_image_t)); + bmp_image = new(zeromem) bmp_image_t; bmp_image->image_size = filesize - data_offset; bmp_image->image_offset = data_offset; @@ -291,7 +293,7 @@ } static void bmp_close(demuxer_t* demuxer) { - bmp_image_t *bmp_image = demuxer->priv; + bmp_image_t *bmp_image = reinterpret_cast<bmp_image_t*>(demuxer->priv); if(!bmp_image) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-23 10:54:04
|
Revision: 440 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=440&view=rev Author: nickols_k Date: 2012-11-23 10:53:52 +0000 (Fri, 23 Nov 2012) Log Message: ----------- security patch: remove suspect and ancient keys. Best protection from context substitution is unavalability of one Modified Paths: -------------- mplayerxp/cfg-mplayerxp.h mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out.h mplayerxp/libvo/vo_opengl.cpp mplayerxp/libvo/vo_x11.cpp mplayerxp/libvo/vo_xv.cpp mplayerxp/libvo/x11_common.cpp mplayerxp/mplayerxp.cpp mplayerxp/xmpcore/xmp_vplayer.cpp Modified: mplayerxp/cfg-mplayerxp.h =================================================================== --- mplayerxp/cfg-mplayerxp.h 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/cfg-mplayerxp.h 2012-11-23 10:53:52 UTC (rev 440) @@ -170,8 +170,6 @@ #ifdef HAVE_X11 static const config_t x11_config[]={ {"display", &vo_conf.mDisplayName, CONF_TYPE_STRING, 0, 0, 0, "specifies the hostname and display number of the X server"}, - {"wid", &vo_conf.WinID, CONF_TYPE_INT, 0, 0, 0, "tells MPlayerXP to use existing X11 window (for using MPlayerXP as plugin)"}, - {"rootwin", &vo_conf.WinID, CONF_TYPE_FLAG, 0, -1, 0, "render movie in the root window (desktop background)"}, #ifdef HAVE_XINERAMA {"xinerama", &mp_conf.xinerama_screen, CONF_TYPE_INT, CONF_RANGE, 0, 32, "tells MPlayerXP the display for movie playback"}, #endif Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -753,9 +753,6 @@ } #undef MIN -// PTS: 0=interleaved 1=BPS-based -int pts_from_bps=1; - // Select ds from ID static demux_stream_t* demux_avi_select_stream(demuxer_t *demux,unsigned int id){ int stream_id=avi_stream_id(id); @@ -856,12 +853,7 @@ } else priv->pts_corr_bytes+=len; } - if(pts_from_bps){ - pts = priv->audio_block_no * - (float)((sh_audio_t*)demux->audio->sh)->audio.dwScale / - (float)((sh_audio_t*)demux->audio->sh)->audio.dwRate; - } else - pts=priv->avi_audio_pts; //+priv->pts_correction; + pts=priv->avi_audio_pts; //+priv->pts_correction; priv->avi_audio_pts=0; // update blockcount: priv->audio_block_no+=priv->audio_block_size ? @@ -905,7 +897,6 @@ static int avi_read_ni(demuxer_t *demux,demux_stream_t* ds); static int avi_read_nini(demuxer_t *demux,demux_stream_t* ds); -int force_ni=0; // force non-interleaved AVI parsing static int avi_demux(demuxer_t *demux,demux_stream_t *__ds){ avi_priv_t *priv=reinterpret_cast<avi_priv_t*>(demux->priv); if(priv->alt_demuxer) return priv->alt_demuxer(demux,__ds); @@ -1128,13 +1119,6 @@ return 1; } -//extern int audio_id; -//extern int video_id; -//extern int index_mode; // -1=untouched 0=don't use index 1=use (geneate) index -//extern int force_ni; -//extern int pts_from_bps; - -// AVI demuxer parameters: int index_mode=-1; // -1=untouched 0=don't use index 1=use (geneate) index extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer); extern demuxer_driver_t demux_ogg; @@ -1211,19 +1195,8 @@ if(a_pos==-1){ MSG_ERR("AVI_NI: " MSGTR_MissingAudioStream); sh_audio=NULL; - } else { - if(abs(a_pos-v_pos)>0x100000) force_ni=2; - } - } else { - // no index - if(force_ni){ - MSG_V(MSGTR_UsingNINI); - priv->idx_pos_a= - priv->idx_pos_v=demuxer->movi_start; - priv->nini=1; - } - demuxer->flags &= ~DEMUXF_SEEKABLE; - } + } + } else demuxer->flags &= ~DEMUXF_SEEKABLE; if(!ds_fill_buffer(d_video)){ MSG_ERR("AVI: " MSGTR_MissingVideoStreamBug); return NULL; @@ -1545,8 +1518,6 @@ } static const config_t avi_options[] = { - {"ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1, "force usage of non-interleaved AVI parser"}, - {"noni", &force_ni, CONF_TYPE_FLAG, 0, 1, 0, "disables usage of non-interleaved AVI parser"}, {"noidx", &index_mode, CONF_TYPE_FLAG, 0, -1, 0, "disables INDEXES for AVI's demuxing"}, {"idx", &index_mode, CONF_TYPE_FLAG, 0, -1, 1, "builds internal INDEXES of incomplete AVIs"}, {"forceidx", &index_mode, CONF_TYPE_FLAG, 0, -1, 2, "forces rebuilding of INDEXES for broken AVIs"}, Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -545,7 +545,6 @@ unsigned i; demuxer_t *demuxer=NULL,*new_demux=NULL; - pts_from_bps=0; demux_aid_vid_mismatch = 0; i=0; again: Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libmpdemux/demuxer.h 2012-11-23 10:53:52 UTC (rev 440) @@ -250,8 +250,6 @@ /* AVI demuxer params: */ extern int index_mode; /**< -1=untouched 0=don't use index 1=use (geneate) index */ -extern int force_ni; -extern int pts_from_bps; extern int demux_aid_vid_mismatch; enum { INFOT_NULL =0, Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libvo/video_out.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -172,7 +172,6 @@ vo_conf.movie_aspect=-1.0; vo_conf.flip=-1; vo_conf.xp_buffs=64; - vo_conf.WinID=-1; vo=new(zeromem) vo_data_t; vo->window = None; Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libvo/video_out.h 2012-11-23 10:53:52 UTC (rev 440) @@ -131,7 +131,6 @@ char * subdevice; // currently unused char* mDisplayName; - int WinID; /* output window id */ int vsync; unsigned xp_buffs; /**< contains number of buffers for decoding ahead */ Modified: mplayerxp/libvo/vo_opengl.cpp =================================================================== --- mplayerxp/libvo/vo_opengl.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libvo/vo_opengl.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -139,15 +139,7 @@ static void resize(vo_data_t*vo,int x,int y){ priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); MSG_V("[gl] Resize: %dx%d\n",x,y); - if (vo_conf.WinID >= 0) { - unsigned top = 0, left = 0, w = x, h = y; - aspect(&w,&h,A_ZOOM); - left=( vo_conf.screenwidth - (priv->dwidth > vo_conf.screenwidth?vo_conf.screenwidth:priv->dwidth) ) / 2; - top=( vo_conf.screenheight - (priv->dheight > vo_conf.screenheight?vo_conf.screenheight:priv->dheight) ) / 2; - w=(priv->dwidth > vo_conf.screenwidth?vo_conf.screenwidth:priv->dwidth); - h=(priv->dheight > vo_conf.screenheight?vo_conf.screenheight:priv->dheight); - gl_init_fb(vo,left,top,w,h); - } else gl_init_fb(vo, 0, 0, x, y ); + gl_init_fb(vo, 0, 0, x, y ); glClear(GL_COLOR_BUFFER_BIT); } @@ -192,21 +184,16 @@ xswa.border_pixel = 0; xswamask = CWBackPixel | CWBorderPixel; - if ( vo_conf.WinID>=0 ) { - vo->window = vo_conf.WinID ? ((Window)vo_conf.WinID) : RootWindow(vo->mDisplay,vo->mScreen); - XUnmapWindow( vo->mDisplay,vo->window ); - XChangeWindowAttributes( vo->mDisplay,vo->window,xswamask,&xswa ); - } else - vo->window = XCreateWindow( vo->mDisplay, RootWindow(vo->mDisplay,vo->mScreen), - hint.x, hint.y, hint.width, hint.height, - 0, priv->depth,CopyFromParent,priv->vinfo.visual,xswamask,&xswa); + vo->window = XCreateWindow( vo->mDisplay, RootWindow(vo->mDisplay,vo->mScreen), + hint.x, hint.y, hint.width, hint.height, + 0, priv->depth,CopyFromParent,priv->vinfo.visual,xswamask,&xswa); vo_x11_classhint( vo->mDisplay,vo->window,"opengl" ); vo_x11_hidecursor(vo->mDisplay,vo->window); - XSelectInput(vo->mDisplay, vo->window, StructureNotifyMask | KeyPressMask | - ((vo_conf.WinID==0) ? 0 : (PointerMotionMask - | ButtonPressMask | ButtonReleaseMask ))); + XSelectInput(vo->mDisplay, vo->window, + StructureNotifyMask | KeyPressMask | PointerMotionMask | + ButtonPressMask | ButtonReleaseMask ); XSetStandardProperties(vo->mDisplay, vo->window, hello, hello, None, NULL, 0, &hint); if ( vo_FS(vo) ) vo_x11_decoration(vo, vo->mDisplay,vo->window,0 ); XMapWindow(vo->mDisplay, vo->window); Modified: mplayerxp/libvo/vo_x11.cpp =================================================================== --- mplayerxp/libvo/vo_x11.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libvo/vo_x11.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -213,16 +213,10 @@ } #endif - if ( vo_conf.WinID>=0 ){ - vo->window = vo_conf.WinID ? ((Window)vo_conf.WinID) : RootWindow( vo->mDisplay,vo->mScreen ); - XUnmapWindow( vo->mDisplay,vo->window ); - XChangeWindowAttributes( vo->mDisplay,vo->window,xswamask,&xswa ); - } else { - vo->window=XCreateWindow( vo->mDisplay,RootWindow( vo->mDisplay,vo->mScreen ), + vo->window=XCreateWindow( vo->mDisplay,RootWindow( vo->mDisplay,vo->mScreen ), hint.x,hint.y, hint.width,hint.height, xswa.border_pixel,priv->depth,CopyFromParent,priv->vinfo.visual,xswamask,&xswa ); - } vo_x11_classhint( vo->mDisplay,vo->window,"vo_x11" ); vo_x11_hidecursor(vo->mDisplay,vo->window); if ( vo_FS(vo) ) vo_x11_decoration(vo,vo->mDisplay,vo->window,0 ); @@ -232,7 +226,6 @@ #ifdef HAVE_XINERAMA vo_x11_xinerama_move(vo,vo->mDisplay,vo->window,&hint); #endif - if(vo_conf.WinID!=0) do { XNextEvent( vo->mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo->window ); XSelectInput( vo->mDisplay,vo->window,NoEventMask ); @@ -241,8 +234,9 @@ vo->gc=XCreateGC( vo->mDisplay,vo->window,0L,&xgcv ); /* we cannot grab mouse events on root window :( */ - XSelectInput( vo->mDisplay,vo->window,StructureNotifyMask | KeyPressMask | - ((vo_conf.WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)) ); + XSelectInput(vo->mDisplay,vo->window, + StructureNotifyMask | KeyPressMask | + ButtonPressMask | ButtonReleaseMask | PointerMotionMask); #ifdef HAVE_XF86VM if ( vo_VM(vo) ) { Modified: mplayerxp/libvo/vo_xv.cpp =================================================================== --- mplayerxp/libvo/vo_xv.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libvo/vo_xv.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -306,21 +306,16 @@ xswa.border_pixel = 0; xswamask = CWBackPixel | CWBorderPixel; - if ( vo_conf.WinID>=0 ){ - vo->window = vo_conf.WinID ? ((Window)vo_conf.WinID) : RootWindow(vo->mDisplay,vo->mScreen); - XUnmapWindow( vo->mDisplay,vo->window ); - XChangeWindowAttributes( vo->mDisplay,vo->window,xswamask,&xswa ); - } else - vo->window = XCreateWindow( vo->mDisplay, RootWindow(vo->mDisplay,vo->mScreen), - hint.x, hint.y, hint.width, hint.height, - 0, priv->depth,CopyFromParent,vinfo.visual,xswamask,&xswa); + vo->window = XCreateWindow( vo->mDisplay, RootWindow(vo->mDisplay,vo->mScreen), + hint.x, hint.y, hint.width, hint.height, + 0, priv->depth,CopyFromParent,vinfo.visual,xswamask,&xswa); vo_x11_classhint( vo->mDisplay,vo->window,"xv" ); vo_x11_hidecursor(vo->mDisplay,vo->window); - XSelectInput(vo->mDisplay, vo->window, StructureNotifyMask | KeyPressMask | - ((vo_conf.WinID==0) ? 0 : (PointerMotionMask - | ButtonPressMask | ButtonReleaseMask))); + XSelectInput(vo->mDisplay, vo->window, + StructureNotifyMask | KeyPressMask | + PointerMotionMask | ButtonPressMask | ButtonReleaseMask); XSetStandardProperties(vo->mDisplay, vo->window, hello, hello, None, NULL, 0, &hint); if ( vo_FS(vo) ) vo_x11_decoration(vo,vo->mDisplay,vo->window,0 ); XMapWindow(vo->mDisplay, vo->window); Modified: mplayerxp/libvo/x11_common.cpp =================================================================== --- mplayerxp/libvo/x11_common.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/libvo/x11_common.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -184,8 +184,6 @@ Colormap colormap; static char bm_no_data[] = { 0,0,0,0, 0,0,0,0 }; - if(vo_conf.WinID==0) return; // do not hide, if we're playing at rootwin - colormap = DefaultColormap(disp,DefaultScreen(disp)); XAllocNamedColor(disp,colormap,"black",&black,&dummy); bm_no = XCreateBitmapFromData(disp, win, bm_no_data, 8,8); @@ -614,8 +612,7 @@ { XSetErrorHandler(NULL); /* and -wid is set */ - if (!(vo_conf.WinID > 0)) - XDestroyWindow(display, window); + XDestroyWindow(display, window); XCloseDisplay(display); vo->depthonscreen = 0; delete vo->priv2; Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/mplayerxp.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -2003,8 +2003,6 @@ if(!sh_audio && !sh_video) exit_player("Nothing to do"); - if(MPXPSys->demuxer()->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! - if(mp_conf.force_fps && sh_video) { sh_video->fps=mp_conf.force_fps; MSG_INFO(MSGTR_FPSforced,sh_video->fps,1.0f/sh_video->fps); Modified: mplayerxp/xmpcore/xmp_vplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vplayer.cpp 2012-11-23 10:26:17 UTC (rev 439) +++ mplayerxp/xmpcore/xmp_vplayer.cpp 2012-11-23 10:53:52 UTC (rev 440) @@ -244,19 +244,10 @@ if(xmp_test_model(XMP_Run_AudioPlayer)) delay += get_delay_audio_buffer(); - if(pts_from_bps){ - unsigned int samples=(sh_audio->audio.dwSampleSize)? - ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : - (d_audio->pack_no); // <- used for VBR audio - samples+=sh_audio->audio.dwStart; // offset - a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; - delay_corrected=1; - } else { - // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) - a_pts=d_audio->pts; - if(!delay_corrected) if(a_pts) delay_corrected=1; - a_pts+=(ds_tell_pts_r(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; - } + // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) + a_pts=d_audio->pts; + if(!delay_corrected) if(a_pts) delay_corrected=1; + a_pts+=(ds_tell_pts_r(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; MSG_DBG2("### A:%8.3f (%8.3f) V:%8.3f A-V:%7.4f \n",a_pts,a_pts-delay,v_pts,(a_pts-delay)-v_pts); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-23 11:55:54
|
Revision: 441 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=441&view=rev Author: nickols_k Date: 2012-11-23 11:55:38 +0000 (Fri, 23 Nov 2012) Log Message: ----------- project uses libav* only, thus rename ffmpeg -> lavc Modified Paths: -------------- Makefile mplayerxp/Makefile mplayerxp/configure mplayerxp/libmpcodecs/Makefile mplayerxp/libmpcodecs/ad.cpp mplayerxp/libmpcodecs/dec_audio.h mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpcodecs/dec_video.h mplayerxp/libmpcodecs/vd.cpp mplayerxp/libmpstream/Makefile mplayerxp/libmpstream/stream.cpp mplayerxp/mplayerxp.cpp mplayerxp/nls/help_mp-cz.h mplayerxp/nls/help_mp-de.h mplayerxp/nls/help_mp-dk.h mplayerxp/nls/help_mp-en.h mplayerxp/nls/help_mp-es.h mplayerxp/nls/help_mp-fr.h mplayerxp/nls/help_mp-hu.h mplayerxp/nls/help_mp-it.h mplayerxp/nls/help_mp-ko.h mplayerxp/nls/help_mp-nl.h mplayerxp/nls/help_mp-no.h mplayerxp/nls/help_mp-pl.h mplayerxp/nls/help_mp-ro.h mplayerxp/nls/help_mp-ru.h mplayerxp/nls/help_mp-sk.h Added Paths: ----------- lavc/ mplayerxp/libmpcodecs/ad_lavc.cpp mplayerxp/libmpcodecs/vd_lavc.cpp mplayerxp/libmpstream/s_lavc.cpp Removed Paths: ------------- ffmpeg/ mplayerxp/libmpcodecs/ad_ffmpeg.cpp mplayerxp/libmpcodecs/vd_ffmpeg.cpp mplayerxp/libmpstream/s_ffmpeg.cpp Modified: Makefile =================================================================== --- Makefile 2012-11-23 10:53:52 UTC (rev 440) +++ Makefile 2012-11-23 11:55:38 UTC (rev 441) @@ -1,5 +1,5 @@ INSTALLABLE_SUBDIRS = mplayerxp etc DOCS -SUBDIRS = ffmpeg $(INSTALLABLE_SUBDIRS) +SUBDIRS = lavc $(INSTALLABLE_SUBDIRS) DO_MAKE = @ for i in $(SUBDIRS); do $(MAKE) -C $$i $@ || exit; done DO_IMAKE = @ for i in $(INSTALLABLE_SUBDIRS); do $(MAKE) -C $$i $@ || exit; done Modified: mplayerxp/Makefile =================================================================== --- mplayerxp/Makefile 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/Makefile 2012-11-23 11:55:38 UTC (rev 441) @@ -25,12 +25,12 @@ OBJS = $(SRCS:.cpp=.o) -FF_LIBS = ../ffmpeg/libavcodec/libavcodec$(FF_SUFFIX).a \ - ../ffmpeg/libswscale/libswscale$(FF_SUFFIX).a \ - ../ffmpeg/libswresample/libswresample$(FF_SUFFIX).a \ - ../ffmpeg/libpostproc/libpostproc$(FF_SUFFIX).a \ - ../ffmpeg/libavformat/libavformat$(FF_SUFFIX).a \ - ../ffmpeg/libavutil/libavutil$(FF_SUFFIX).a +FF_LIBS = ../lavc/libavcodec/libavcodec$(LAVC_SUFFIX).a \ + ../lavc/libswscale/libswscale$(LAVC_SUFFIX).a \ + ../lavc/libswresample/libswresample$(LAVC_SUFFIX).a \ + ../lavc/libpostproc/libpostproc$(LAVC_SUFFIX).a \ + ../lavc/libavformat/libavformat$(LAVC_SUFFIX).a \ + ../lavc/libavutil/libavutil$(LAVC_SUFFIX).a MP_LIBS = libmpstream/libmpstream.a \ libmpdemux/libmpdemux.a \ Modified: mplayerxp/configure =================================================================== --- mplayerxp/configure 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/configure 2012-11-23 11:55:38 UTC (rev 441) @@ -360,30 +360,30 @@ add_cflags "-I$srcdir" -disable ffmpeg -# Checking for FFMPEG -test -f "../ffmpeg/libavcodec/avcodec.h" && enable ffmpeg -disabled ffmpeg && die "**FATAL**: local copy of ffmpeg doesn't exist!" -add_cflags "-I$srcdir/../ffmpeg" -print_config HAVE_ mp_config.h mp_config.mak ffmpeg -# Configuring external ffmpeg stuff -ffmpeg_args="--enable-static --disable-shared --enable-gpl --enable-pthreads --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-avdevice --disable-avfilter --disable-avresample" +disable lavc +# Checking for LAVC +test -f "../lavc/libavcodec/avcodec.h" && enable lavc +disabled lavc && die "**FATAL**: local copy of lavc doesn't exist!" +add_cflags "-I$srcdir/../lavc" +print_config HAVE_ mp_config.h mp_config.mak lavc +# Configuring external lavc stuff +lavc_args="--enable-static --disable-shared --enable-gpl --enable-pthreads --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-avdevice --disable-avfilter --disable-avresample" if test -n $host ; then _arch=$host_arch x86_32 && _arch="i686" x86_64 && _arch="x86_64" -x86_32 && ff_libsuffix="32" -x86_64 && ff_libsuffix="64" -ffmpeg_args="--arch=$_arch --build-suffix=$ff_libsuffix $ffmpeg_args" +x86_32 && lavc_libsuffix="32" +x86_64 && lavc_libsuffix="64" +lavc_args="--arch=$_arch --build-suffix=$lavc_libsuffix $lavc_args" fi -test "$debug" != "0" && ffmpeg_args="$ffmpeg_args --enable-debug=$debug" -enabled $profile && ffmpeg_args="$ffmpeg_args --enable-profile" -if test -f "../ffmpeg/libavcodec/libavcodec$ff_libsuffix.a"; then -echocheck "ffmpeg was already configured for $_arch" +test "$debug" != "0" && lavc_args="$lavc_args --enable-debug=$debug" +enabled $profile && lavc_args="$lavc_args --enable-profile" +if test -f "../lavc/libavcodec/libavcodec$lavc_libsuffix.a"; then +echocheck "lavc was already configured for $_arch" else -echocheck "configuring ffmpeg stuff: --cc=\"$cc\" $ffmpeg_args" -cd ../ffmpeg -$(LC_ALL=C ./configure --cc="$cc" $ffmpeg_args) +echocheck "configuring lavc stuff: --cc=\"$cc\" $lavc_args" +cd ../lavc +$(LC_ALL=C ./configure --cc="$cc" $lavc_args) cd $srcdir fi echores "done" @@ -905,7 +905,7 @@ LIBDIR = $libdir DESTDIR = $DESTDIR PROGNAME = $prog_alias -FF_SUFFIX=$ff_libsuffix +LAVC_SUFFIX=$lavc_libsuffix AR = ar CC = $cc CXX = $cxx @@ -1159,17 +1159,17 @@ #define UINT64_C __UINT64_C #define FF_API_OLD_DECODE_AUDIO 1 -#include "$srcdir/../ffmpeg/libavcodec/avcodec.h" -#include "$srcdir/../ffmpeg/libpostproc/postprocess.h" -#include "$srcdir/../ffmpeg/libswscale/swscale.h" -#include "$srcdir/../ffmpeg/libswscale/rgb2rgb.h" -#include "$srcdir/../ffmpeg/libavutil/fifo.h" -#include "$srcdir/../ffmpeg/libavutil/audioconvert.h" -#include "$srcdir/../ffmpeg/libswresample/swresample.h" -#include "$srcdir/../ffmpeg/libavformat/riff.h" -#include "$srcdir/../ffmpeg/libavformat/avformat.h" -#include "$srcdir/../ffmpeg/libavformat/avio.h" -#include "$srcdir/../ffmpeg/libavformat/url.h" +#include "$srcdir/../lavc/libavcodec/avcodec.h" +#include "$srcdir/../lavc/libpostproc/postprocess.h" +#include "$srcdir/../lavc/libswscale/swscale.h" +#include "$srcdir/../lavc/libswscale/rgb2rgb.h" +#include "$srcdir/../lavc/libavutil/fifo.h" +#include "$srcdir/../lavc/libavutil/audioconvert.h" +#include "$srcdir/../lavc/libswresample/swresample.h" +#include "$srcdir/../lavc/libavformat/riff.h" +#include "$srcdir/../lavc/libavformat/avformat.h" +#include "$srcdir/../lavc/libavformat/avio.h" +#include "$srcdir/../lavc/libavformat/url.h" #ifdef __cplusplus } Modified: mplayerxp/libmpcodecs/Makefile =================================================================== --- mplayerxp/libmpcodecs/Makefile 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/Makefile 2012-11-23 11:55:38 UTC (rev 441) @@ -9,7 +9,7 @@ CXXSRCS+=ad_a52.cpp ad_hwac3.cpp -CXXSRCS+=vd_ffmpeg.cpp \ +CXXSRCS+=vd_lavc.cpp \ vd_null.cpp \ vd_nuv.cpp \ vd_raw.cpp \ @@ -19,7 +19,7 @@ vd_huffyuv.cpp \ ad_dca.cpp \ ad_faad.cpp \ - ad_ffmpeg.cpp \ + ad_lavc.cpp \ ad_null.cpp \ ad_mp3.cpp \ ad_pcm.cpp \ Modified: mplayerxp/libmpcodecs/ad.cpp =================================================================== --- mplayerxp/libmpcodecs/ad.cpp 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/ad.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -21,7 +21,7 @@ extern const ad_functions_t mpcodecs_ad_null; extern const ad_functions_t mpcodecs_ad_mp3; -extern const ad_functions_t mpcodecs_ad_ffmpeg; +extern const ad_functions_t mpcodecs_ad_lavc; extern const ad_functions_t mpcodecs_ad_a52; extern const ad_functions_t mpcodecs_ad_dca; extern const ad_functions_t mpcodecs_ad_hwac3; @@ -61,7 +61,7 @@ &mpcodecs_ad_dmo, &mpcodecs_ad_qtaudio, #endif - &mpcodecs_ad_ffmpeg, + &mpcodecs_ad_lavc, &mpcodecs_ad_null, }; Deleted: mplayerxp/libmpcodecs/ad_ffmpeg.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_ffmpeg.cpp 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/ad_ffmpeg.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -1,230 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#define __USE_GNU 1 -#define __USE_XOPEN 1 -#include <unistd.h> -#include <assert.h> -#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ -#include "libao2/afmt.h" -#include "ad_internal.h" - -#include "mp_config.h" -#include "help_mp.h" -#include "osdep/bswap.h" -#include "osdep/mplib.h" -#include "libmpconf/codec-cfg.h" - -#include "mp_conf_lavc.h"" -#include "codecs_ld.h" - -using namespace mpxp; - -typedef struct priv_s { - AVCodecContext *lavc_ctx; - audio_probe_t* probe; -}priv_t; - -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { - unsigned i; - audio_probe_t* acodec = NULL; - const char *what="AVCodecID"; - priv_t* priv=reinterpret_cast<priv_t*>(sh->context); - enum AVCodecID id = ff_codec_get_id(ff_codec_wav_tags,wtag); - if (id <= 0) { - prn_err: - MSG_ERR("Cannot find %s for '0x%X' tag! Try force -ac option\n" - ,what - ,sh->wtag); - return NULL; - } - if(!priv){ - priv=new(zeromem) priv_t; - sh->context=priv; -// avcodec_init(); - avcodec_register_all(); - } - AVCodec *codec=avcodec_find_decoder(id); - if(!codec) { what="AVCodec"; goto prn_err; } - - acodec=new(zeromem) audio_probe_t; - acodec->codec_dll=mp_strdup(avcodec_get_name(id)); - acodec->driver="ffmpeg"; - acodec->wtag=wtag; - if(codec->sample_fmts) - for(i=0;i<Audio_MaxOutSample;i++) { - if(codec->sample_fmts[i]==-1) break; - acodec->sample_fmt[i]=ff_codec_get_tag(ff_codec_wav_tags,id); - } - priv->probe=acodec; - return acodec; -} - -struct codecs_st* __FASTCALL__ find_ffmpeg_audio(sh_audio_t* sh) { - const audio_probe_t* aprobe=probe(sh,sh->wtag); - struct codecs_st* acodec = NULL; - if(aprobe) { - acodec=new(zeromem) struct codecs_st; - strcpy(acodec->dll_name,aprobe->codec_dll); - strcpy(acodec->driver_name,aprobe->driver); - strcpy(acodec->codec_name,acodec->dll_name); - memcpy(acodec->outfmt,aprobe->sample_fmt,sizeof(aprobe->sample_fmt)); - } - return acodec; -} - -#ifndef FF_INPUT_BUFFER_PADDING_SIZE -#define FF_INPUT_BUFFER_PADDING_SIZE 8 -#endif - -static const ad_info_t info = { - "FFmpeg/libavcodec audio decoders", - "ffmpeg", - "Nickols_K", - "build-in" -}; - -static const config_t options[] = { - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBAD_EXTERN(ffmpeg) - -MPXP_Rc preinit(sh_audio_t *sh) -{ - sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; - return MPXP_Ok; -} - -MPXP_Rc init(sh_audio_t *sh_audio) -{ - int x; - float pts; - AVCodec *lavc_codec=NULL; - priv_t* priv=reinterpret_cast<priv_t*>(sh_audio->context); - MSG_V("FFmpeg's libavcodec audio codec\n"); - if(!priv){ - priv=new(zeromem) priv_t; - sh_audio->context=priv; -// avcodec_init(); - avcodec_register_all(); - } - lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh_audio->codec->dll_name); - if(!lavc_codec) { - MSG_ERR(MSGTR_MissingLAVCcodec,sh_audio->codec->dll_name); - return MPXP_False; - } - priv->lavc_ctx = avcodec_alloc_context3(lavc_codec); - if(sh_audio->wf) { - priv->lavc_ctx->channels = sh_audio->wf->nChannels; - priv->lavc_ctx->sample_rate = sh_audio->wf->nSamplesPerSec; - priv->lavc_ctx->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; - priv->lavc_ctx->block_align = sh_audio->wf->nBlockAlign; - priv->lavc_ctx->bits_per_coded_sample = sh_audio->wf->wBitsPerSample; - /* alloc extra data */ - if (sh_audio->wf->cbSize > 0) { - priv->lavc_ctx->extradata = new uint8_t[sh_audio->wf->cbSize+FF_INPUT_BUFFER_PADDING_SIZE]; - priv->lavc_ctx->extradata_size = sh_audio->wf->cbSize; - memcpy(priv->lavc_ctx->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX), - priv->lavc_ctx->extradata_size); - } - } - // for QDM2 - if (sh_audio->codecdata_len && sh_audio->codecdata && !priv->lavc_ctx->extradata) { - priv->lavc_ctx->extradata = new uint8_t[sh_audio->codecdata_len]; - priv->lavc_ctx->extradata_size = sh_audio->codecdata_len; - memcpy(priv->lavc_ctx->extradata, (char *)sh_audio->codecdata, - priv->lavc_ctx->extradata_size); - } - priv->lavc_ctx->codec_tag = sh_audio->wtag; - priv->lavc_ctx->codec_type = lavc_codec->type; - priv->lavc_ctx->codec_id = lavc_codec->id; - /* open it */ - if (avcodec_open2(priv->lavc_ctx, lavc_codec, NULL) < 0) { - MSG_ERR( MSGTR_CantOpenCodec); - return MPXP_False; - } - MSG_V("INFO: libavcodec init OK!\n"); - - // Decode at least 1 byte: (to get header filled) - x=decode(sh_audio,reinterpret_cast<unsigned char*>(sh_audio->a_buffer),1,sh_audio->a_buffer_size,&pts); - if(x>0) sh_audio->a_buffer_len=x; - - sh_audio->nch=priv->lavc_ctx->channels; - sh_audio->rate=priv->lavc_ctx->sample_rate; - switch(priv->lavc_ctx->sample_fmt) { - case AV_SAMPLE_FMT_U8: ///< unsigned 8 bits - sh_audio->afmt=AFMT_U8; - break; - default: - case AV_SAMPLE_FMT_S16: ///< signed 16 bits - sh_audio->afmt=AFMT_S16_LE; - break; - case AV_SAMPLE_FMT_S32: ///< signed 32 bits - sh_audio->afmt=AFMT_S32_LE; - break; - case AV_SAMPLE_FMT_FLT: ///< float - sh_audio->afmt=AFMT_FLOAT32; - break; - } - sh_audio->i_bps=priv->lavc_ctx->bit_rate/8; - return MPXP_Ok; -} - -void uninit(sh_audio_t *sh) -{ - priv_t* priv=reinterpret_cast<priv_t*>(sh->context); - avcodec_close(priv->lavc_ctx); - if (priv->lavc_ctx->extradata) delete priv->lavc_ctx->extradata; - delete priv->lavc_ctx; - if(priv->probe) { delete priv->probe->codec_dll; delete priv->probe; } - delete priv; - sh->context=NULL; -} - -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) -{ - UNUSED(arg); - priv_t* priv = reinterpret_cast<priv_t*>(sh->context); - switch(cmd){ - case ADCTRL_RESYNC_STREAM: - avcodec_flush_buffers(priv->lavc_ctx); - return MPXP_True; - default: break; - } - return MPXP_Unknown; -} - -unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) -{ - priv_t* priv = reinterpret_cast<priv_t*>(sh_audio->context); - unsigned char *start=NULL; - int y; - unsigned len=0; - float apts=0.,null_pts; - while(len<minlen){ - AVPacket pkt; - int len2=maxlen; - int x=ds_get_packet_r(sh_audio->ds,&start,apts?&null_pts:&apts); - if(x<=0) break; // error - if(sh_audio->wtag==mmioFOURCC('d','n','e','t')) swab(start,start,x&(~1)); - av_init_packet(&pkt); - pkt.data = start; - pkt.size = x; - y=avcodec_decode_audio3(priv->lavc_ctx,(int16_t*)buf,&len2,&pkt); - if(y<0){ MSG_V("lavc_audio: error\n");break; } - if(y<x) - { - sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!) - if(sh_audio->wtag==mmioFOURCC('d','n','e','t')) - swab(start+y,start+y,(x-y)&~(1)); - } - if(len2>0){ - //len=len2;break; - if(len==0) len=len2; else len+=len2; - buf+=len2; - } - MSG_DBG2("Decoded %d -> %d \n",y,len2); - } - *pts=apts; - return len; -} Copied: mplayerxp/libmpcodecs/ad_lavc.cpp (from rev 437, mplayerxp/libmpcodecs/ad_ffmpeg.cpp) =================================================================== --- mplayerxp/libmpcodecs/ad_lavc.cpp (rev 0) +++ mplayerxp/libmpcodecs/ad_lavc.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -0,0 +1,230 @@ +#include <stdio.h> +#include <stdlib.h> +#define __USE_GNU 1 +#define __USE_XOPEN 1 +#include <unistd.h> +#include <assert.h> +#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ +#include "libao2/afmt.h" +#include "ad_internal.h" + +#include "mp_config.h" +#include "help_mp.h" +#include "osdep/bswap.h" +#include "osdep/mplib.h" +#include "libmpconf/codec-cfg.h" + +#include "mp_conf_lavc.h"" +#include "codecs_ld.h" + +using namespace mpxp; + +typedef struct priv_s { + AVCodecContext *lavc_ctx; + audio_probe_t* probe; +}priv_t; + +static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { + unsigned i; + audio_probe_t* acodec = NULL; + const char *what="AVCodecID"; + priv_t* priv=reinterpret_cast<priv_t*>(sh->context); + enum AVCodecID id = ff_codec_get_id(ff_codec_wav_tags,wtag); + if (id <= 0) { + prn_err: + MSG_ERR("Cannot find %s for '0x%X' tag! Try force -ac option\n" + ,what + ,sh->wtag); + return NULL; + } + if(!priv){ + priv=new(zeromem) priv_t; + sh->context=priv; +// avcodec_init(); + avcodec_register_all(); + } + AVCodec *codec=avcodec_find_decoder(id); + if(!codec) { what="AVCodec"; goto prn_err; } + + acodec=new(zeromem) audio_probe_t; + acodec->codec_dll=mp_strdup(avcodec_get_name(id)); + acodec->driver="lavc"; + acodec->wtag=wtag; + if(codec->sample_fmts) + for(i=0;i<Audio_MaxOutSample;i++) { + if(codec->sample_fmts[i]==-1) break; + acodec->sample_fmt[i]=ff_codec_get_tag(ff_codec_wav_tags,id); + } + priv->probe=acodec; + return acodec; +} + +struct codecs_st* __FASTCALL__ find_lavc_audio(sh_audio_t* sh) { + const audio_probe_t* aprobe=probe(sh,sh->wtag); + struct codecs_st* acodec = NULL; + if(aprobe) { + acodec=new(zeromem) struct codecs_st; + strcpy(acodec->dll_name,aprobe->codec_dll); + strcpy(acodec->driver_name,aprobe->driver); + strcpy(acodec->codec_name,acodec->dll_name); + memcpy(acodec->outfmt,aprobe->sample_fmt,sizeof(aprobe->sample_fmt)); + } + return acodec; +} + +#ifndef FF_INPUT_BUFFER_PADDING_SIZE +#define FF_INPUT_BUFFER_PADDING_SIZE 8 +#endif + +static const ad_info_t info = { + "lavc audio decoders", + "lavc", + "Nickols_K", + "build-in" +}; + +static const config_t options[] = { + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBAD_EXTERN(lavc) + +MPXP_Rc preinit(sh_audio_t *sh) +{ + sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; + return MPXP_Ok; +} + +MPXP_Rc init(sh_audio_t *sh_audio) +{ + int x; + float pts; + AVCodec *lavc_codec=NULL; + priv_t* priv=reinterpret_cast<priv_t*>(sh_audio->context); + MSG_V("LAVC audio codec\n"); + if(!priv){ + priv=new(zeromem) priv_t; + sh_audio->context=priv; +// avcodec_init(); + avcodec_register_all(); + } + lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh_audio->codec->dll_name); + if(!lavc_codec) { + MSG_ERR(MSGTR_MissingLAVCcodec,sh_audio->codec->dll_name); + return MPXP_False; + } + priv->lavc_ctx = avcodec_alloc_context3(lavc_codec); + if(sh_audio->wf) { + priv->lavc_ctx->channels = sh_audio->wf->nChannels; + priv->lavc_ctx->sample_rate = sh_audio->wf->nSamplesPerSec; + priv->lavc_ctx->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; + priv->lavc_ctx->block_align = sh_audio->wf->nBlockAlign; + priv->lavc_ctx->bits_per_coded_sample = sh_audio->wf->wBitsPerSample; + /* alloc extra data */ + if (sh_audio->wf->cbSize > 0) { + priv->lavc_ctx->extradata = new uint8_t[sh_audio->wf->cbSize+FF_INPUT_BUFFER_PADDING_SIZE]; + priv->lavc_ctx->extradata_size = sh_audio->wf->cbSize; + memcpy(priv->lavc_ctx->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX), + priv->lavc_ctx->extradata_size); + } + } + // for QDM2 + if (sh_audio->codecdata_len && sh_audio->codecdata && !priv->lavc_ctx->extradata) { + priv->lavc_ctx->extradata = new uint8_t[sh_audio->codecdata_len]; + priv->lavc_ctx->extradata_size = sh_audio->codecdata_len; + memcpy(priv->lavc_ctx->extradata, (char *)sh_audio->codecdata, + priv->lavc_ctx->extradata_size); + } + priv->lavc_ctx->codec_tag = sh_audio->wtag; + priv->lavc_ctx->codec_type = lavc_codec->type; + priv->lavc_ctx->codec_id = lavc_codec->id; + /* open it */ + if (avcodec_open2(priv->lavc_ctx, lavc_codec, NULL) < 0) { + MSG_ERR( MSGTR_CantOpenCodec); + return MPXP_False; + } + MSG_V("INFO: libavcodec init OK!\n"); + + // Decode at least 1 byte: (to get header filled) + x=decode(sh_audio,reinterpret_cast<unsigned char*>(sh_audio->a_buffer),1,sh_audio->a_buffer_size,&pts); + if(x>0) sh_audio->a_buffer_len=x; + + sh_audio->nch=priv->lavc_ctx->channels; + sh_audio->rate=priv->lavc_ctx->sample_rate; + switch(priv->lavc_ctx->sample_fmt) { + case AV_SAMPLE_FMT_U8: ///< unsigned 8 bits + sh_audio->afmt=AFMT_U8; + break; + default: + case AV_SAMPLE_FMT_S16: ///< signed 16 bits + sh_audio->afmt=AFMT_S16_LE; + break; + case AV_SAMPLE_FMT_S32: ///< signed 32 bits + sh_audio->afmt=AFMT_S32_LE; + break; + case AV_SAMPLE_FMT_FLT: ///< float + sh_audio->afmt=AFMT_FLOAT32; + break; + } + sh_audio->i_bps=priv->lavc_ctx->bit_rate/8; + return MPXP_Ok; +} + +void uninit(sh_audio_t *sh) +{ + priv_t* priv=reinterpret_cast<priv_t*>(sh->context); + avcodec_close(priv->lavc_ctx); + if (priv->lavc_ctx->extradata) delete priv->lavc_ctx->extradata; + delete priv->lavc_ctx; + if(priv->probe) { delete priv->probe->codec_dll; delete priv->probe; } + delete priv; + sh->context=NULL; +} + +MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +{ + UNUSED(arg); + priv_t* priv = reinterpret_cast<priv_t*>(sh->context); + switch(cmd){ + case ADCTRL_RESYNC_STREAM: + avcodec_flush_buffers(priv->lavc_ctx); + return MPXP_True; + default: break; + } + return MPXP_Unknown; +} + +unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) +{ + priv_t* priv = reinterpret_cast<priv_t*>(sh_audio->context); + unsigned char *start=NULL; + int y; + unsigned len=0; + float apts=0.,null_pts; + while(len<minlen){ + AVPacket pkt; + int len2=maxlen; + int x=ds_get_packet_r(sh_audio->ds,&start,apts?&null_pts:&apts); + if(x<=0) break; // error + if(sh_audio->wtag==mmioFOURCC('d','n','e','t')) swab(start,start,x&(~1)); + av_init_packet(&pkt); + pkt.data = start; + pkt.size = x; + y=avcodec_decode_audio3(priv->lavc_ctx,(int16_t*)buf,&len2,&pkt); + if(y<0){ MSG_V("lavc_audio: error\n");break; } + if(y<x) + { + sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!) + if(sh_audio->wtag==mmioFOURCC('d','n','e','t')) + swab(start+y,start+y,(x-y)&~(1)); + } + if(len2>0){ + //len=len2;break; + if(len==0) len=len2; else len+=len2; + buf+=len2; + } + MSG_DBG2("Decoded %d -> %d \n",y,len2); + } + *pts=apts; + return len; +} Modified: mplayerxp/libmpcodecs/dec_audio.h =================================================================== --- mplayerxp/libmpcodecs/dec_audio.h 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/dec_audio.h 2012-11-23 11:55:38 UTC (rev 441) @@ -12,7 +12,7 @@ extern void __FASTCALL__ mpca_resync_stream(any_t *handle); extern void __FASTCALL__ mpca_skip_frame(any_t *handle); struct codecs_st; -extern struct codecs_st* __FASTCALL__ find_ffmpeg_audio(sh_audio_t*); +extern struct codecs_st* __FASTCALL__ find_lavc_audio(sh_audio_t*); extern MPXP_Rc mpca_init_filters(sh_audio_t *sh_audio, unsigned in_samplerate, unsigned in_channels, mpaf_format_e in_format, Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -127,19 +127,19 @@ #endif } -any_t * mpcv_ffmpeg_init(sh_video_t* sh_video,any_t* libinput) { +any_t * mpcv_lavc_init(sh_video_t* sh_video,any_t* libinput) { priv_t* priv = new(zeromem) priv_t; priv->parent=sh_video; sh_video->decoder=priv; - /* Use ffmpeg's drivers as last hope */ - priv->mpvdec=vfm_find_driver("ffmpeg"); + /* Use lavc's drivers as last hope */ + priv->mpvdec=vfm_find_driver("lavc"); if(priv->mpvdec) { if(priv->mpvdec->init(sh_video,libinput)!=MPXP_Ok){ MSG_ERR(MSGTR_CODEC_CANT_INITV); return NULL; } } else { - MSG_ERR("Cannot find ffmpeg video decoder\n"); + MSG_ERR("Cannot find lavc video decoder\n"); return NULL; } mpcv_print_codec_info(priv); Modified: mplayerxp/libmpcodecs/dec_video.h =================================================================== --- mplayerxp/libmpcodecs/dec_video.h 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/dec_video.h 2012-11-23 11:55:38 UTC (rev 441) @@ -8,7 +8,7 @@ // dec_video.c: extern any_t* __FASTCALL__ mpcv_init(sh_video_t *sh_video, const char *codec_name,const char *family,int status,any_t*libinput); extern void __FASTCALL__ mpcv_uninit(any_t *handle); -extern any_t* __FASTCALL__ mpcv_ffmpeg_init(sh_video_t*,any_t* libinput); +extern any_t* __FASTCALL__ mpcv_lavc_init(sh_video_t*,any_t* libinput); extern int __FASTCALL__ mpcv_decode(any_t *handle,const enc_frame_t* frame); extern MPXP_Rc __FASTCALL__ mpcv_get_quality_max(any_t *handle,unsigned *qual); Modified: mplayerxp/libmpcodecs/vd.cpp =================================================================== --- mplayerxp/libmpcodecs/vd.cpp 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/vd.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -21,7 +21,7 @@ using namespace mpxp; extern const vd_functions_t mpcodecs_vd_null; -extern const vd_functions_t mpcodecs_vd_ffmpeg; +extern const vd_functions_t mpcodecs_vd_lavc; extern const vd_functions_t mpcodecs_vd_dshow; extern const vd_functions_t mpcodecs_vd_vfw; extern const vd_functions_t mpcodecs_vd_vfwex; @@ -68,7 +68,7 @@ #ifdef HAVE_LIBDV &mpcodecs_vd_libdv, #endif - &mpcodecs_vd_ffmpeg, + &mpcodecs_vd_lavc, &mpcodecs_vd_null, NULL }; Deleted: mplayerxp/libmpcodecs/vd_ffmpeg.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_ffmpeg.cpp 2012-11-23 10:53:52 UTC (rev 440) +++ mplayerxp/libmpcodecs/vd_ffmpeg.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -1,780 +0,0 @@ -#include <algorithm> - -#include <ctype.h> -#include <stdio.h> -#include <stdlib.h> -#include <assert.h> -#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ - -#include "mp_config.h" -#include "mplayerxp.h" -#include "xmpcore/xmp_core.h" -#ifdef HAVE_GOMP -#include <omp.h> -#endif - -#include "help_mp.h" - -#include "osdep/bswap.h" -#include "osdep/mplib.h" - -#include "vd_internal.h" -#include "codecs_ld.h" -#include "postproc/postprocess.h" -#include "postproc/vf.h" -#include "libvo/video_out.h" -#include "osdep/bswap.h" - -using namespace mpxp; - -static const vd_info_t info = { - "FFmpeg's libavcodec codec family", - "ffmpeg", - "A'rpi", - "build-in" -}; - -static int lavc_param_error_resilience=2; -static int lavc_param_error_concealment=3; -static int lavc_param_vstats=0; -static int lavc_param_idct_algo=0; -static int lavc_param_debug=0; -static int lavc_param_vismv=0; -static int lavc_param_skip_top=0; -static int lavc_param_skip_bottom=0; -static int lavc_param_lowres=0; -static char *lavc_param_lowres_str=NULL; -static char *lavc_param_skip_loop_filter_str = NULL; -static char *lavc_param_skip_idct_str = NULL; -static char *lavc_param_skip_frame_str = NULL; -static int lavc_param_threads=-1; -static char *lavc_avopt = NULL; - -static int enable_ffslices=1; -static const config_t ff_options[] = { - {"slices", &enable_ffslices, CONF_TYPE_FLAG, 0, 0, 1, "enables slice-based method of frame rendering in ffmpeg decoder"}, - {"noslices", &enable_ffslices, CONF_TYPE_FLAG, 0, 1, 0, "disables slice-based method of frame rendering in ffmpeg decoder"}, - {"er", &lavc_param_error_resilience, CONF_TYPE_INT, CONF_RANGE, 0, 99, "specifies error resilience for ffmpeg decoders"}, - {"idct", &lavc_param_idct_algo, CONF_TYPE_INT, CONF_RANGE, 0, 99, "specifies idct algorithm for ffmpeg decoders"}, - {"ec", &lavc_param_error_concealment, CONF_TYPE_INT, CONF_RANGE, 0, 99, "specifies error concealment for ffmpeg decoders"}, - {"vstats", &lavc_param_vstats, CONF_TYPE_FLAG, 0, 0, 1, "specifies vstat for ffmpeg decoders"}, - {"debug", &lavc_param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 9999999, "specifies debug level for ffmpeg decoders"}, - {"vismv", &lavc_param_vismv, CONF_TYPE_INT, CONF_RANGE, 0, 9999999, "specifies visualize motion vectors (MVs) for ffmpeg decoders"}, - {"st", &lavc_param_skip_top, CONF_TYPE_INT, CONF_RANGE, 0, 999, "specifies skipping top lines for ffmpeg decoders"}, - {"sb", &lavc_param_skip_bottom, CONF_TYPE_INT, CONF_RANGE, 0, 999, "specifies skipping bottom lines for ffmpeg decoders"}, - {"lowres", &lavc_param_lowres_str, CONF_TYPE_STRING, 0, 0, 0, "specifies decoding at 1= 1/2, 2=1/4, 3=1/8 resolutions for ffmpeg decoders"}, - {"skiploopfilter", &lavc_param_skip_loop_filter_str, CONF_TYPE_STRING, 0, 0, 0, "specifies skipping of loop filters for ffmpeg decoders"}, - {"skipidct", &lavc_param_skip_idct_str, CONF_TYPE_STRING, 0, 0, 0, "specifies skipping of IDCT filters for ffmpeg decoders"}, - {"skipframe", &lavc_param_skip_frame_str, CONF_TYPE_STRING, 0, 0, 0, "indicates frame skipping for ffmpeg decoders"}, - {"threads", &lavc_param_threads, CONF_TYPE_INT, CONF_RANGE, 1, 8, "specifies number of threads for ffmpeg decoders"}, - {"o", &lavc_avopt, CONF_TYPE_STRING, 0, 0, 0, "specifies additional option for ffmpeg decoders"}, - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -static const config_t options[] = { - {"ffmpeg", (any_t*)&ff_options, CONF_TYPE_SUBCONFIG, 0, 0, 0, "FFMPEG specific options"}, - { NULL, NULL, 0, 0, 0, 0, NULL} -}; - -LIBVD_EXTERN(ffmpeg) - -#include "libavcodec/avcodec.h" -#include "libavformat/riff.h" -#include "libvo/video_out.h" - - -static int vcodec_inited=0; -typedef struct priv_s { - int use_slices; - int cap_slices; - int use_dr1; - int cap_dr1; - AVCodec *lavc_codec; - AVCodecContext *ctx; - AVFrame *lavc_picture; - mp_image_t* mpi; - unsigned long long frame_number; /* total frame number since begin of movie */ - int b_age; - int ip_age[2]; - int qp_stat[32]; -// double qp_sum; -// double inv_qp_sum; - int ip_count; - int b_count; - int vo_inited; - int hello_printed; - video_probe_t* probe; -}priv_t; -static pp_context* ppContext=NULL; -static void draw_slice(struct AVCodecContext *s, const AVFrame *src, int offset[4], int y, int type, int height); - -static enum AVDiscard str2AVDiscard(char *str) { - if (!str) return AVDISCARD_DEFAULT; - if (strcasecmp(str, "none" ) == 0) return AVDISCARD_NONE; - if (strcasecmp(str, "default") == 0) return AVDISCARD_DEFAULT; - if (strcasecmp(str, "nonref" ) == 0) return AVDISCARD_NONREF; - if (strcasecmp(str, "bidir" ) == 0) return AVDISCARD_BIDIR; - if (strcasecmp(str, "nonkey" ) == 0) return AVDISCARD_NONKEY; - if (strcasecmp(str, "all" ) == 0) return AVDISCARD_ALL; - MSG_ERR("Unknown discard value %s\n", str); - return AVDISCARD_DEFAULT; -} - -/* stupid workaround for current version of ffmpeg */ -const __attribute((used)) uint8_t last_coeff_flag_offset_8x8[63] = { - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8 -}; - -/* to set/get/query special features/parameters */ -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ - priv_t *ctx = reinterpret_cast<priv_t*>(sh->context); - uint32_t out_fourcc; - AVCodecContext *avctx = ctx->ctx; - switch(cmd){ - case VDCTRL_QUERY_MAX_PP_LEVEL: - *((unsigned*)arg)=PP_QUALITY_MAX; - return MPXP_Ok; - case VDCTRL_SET_PP_LEVEL: { - int quality=*((int*)arg); - if(quality<0 || quality>PP_QUALITY_MAX) quality=PP_QUALITY_MAX; - return MPXP_Ok; - } - case VDCTRL_QUERY_FORMAT: - { - uint32_t format =(*((int*)arg)); - if(avctx->pix_fmt == -1 && - avctx->get_format && - avctx->codec->pix_fmts) - avctx->pix_fmt = avctx->get_format(avctx, avctx->codec->pix_fmts); - MSG_DBG2("[vd_ffmpeg QUERY_FORMAT for %c%c%c%c] pixfmt = %X\n" - ,((char *)&format)[0],((char *)&format)[1],((char *)&format)[2],((char *)&format)[3] - ,avctx->pix_fmt); - if(avctx->codec->pix_fmts) { - unsigned i; - MSG_DBG2("[vd_ffmpeg]avctx->codec->pix_fmts:"); - for(i=0;;i++) { MSG_DBG2(" %X",avctx->codec->pix_fmts[i]); if(avctx->codec->pix_fmts[i]==-1) break; } - MSG_DBG2("\n"); - } - else - MSG_DBG2("[vd_ffmpeg]avctx->codec->pix_fmts doesn't exist\n"); - out_fourcc = fourcc_from_pixfmt(avctx->pix_fmt); - if(out_fourcc==format) return MPXP_True; - // possible conversions: - switch( format ){ - case IMGFMT_YV12: - case IMGFMT_IYUV: - case IMGFMT_I420: - // "converted" using pointer/stride modification - if( avctx->pix_fmt==PIX_FMT_YUV420P || // u/v swap - avctx->pix_fmt==PIX_FMT_YUV422P || - avctx->pix_fmt==PIX_FMT_YUVJ420P) return MPXP_True;// half stride - /* these codecs may return only: PIX_FMT_YUV422P, PIX_FMT_YUV444P, PIX_FMT_YUV420P*/ - /* TODO: we must test pix_fmt after decoding first frame at least */ - if( avctx->codec_id == CODEC_ID_MPEG1VIDEO || - avctx->codec_id == CODEC_ID_MPEG2VIDEO) return MPXP_True; - break; -#ifdef HAVE_XVMC - case IMGFMT_XVMC_IDCT_MPEG2: - case IMGFMT_XVMC_MOCO_MPEG2: - if(avctx->pix_fmt==PIX_FMT_XVMC_MPEG2_IDCT) return MPXP_True; -#endif - } - return MPXP_False; - } - break; - case VDCTRL_RESYNC_STREAM: - avcodec_flush_buffers(avctx); - return MPXP_True; - } - return MPXP_Unknown; -} - -static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fcc) { - unsigned i; - unsigned char flag = CODECS_FLAG_NOFLIP; - video_probe_t* vprobe = NULL; - priv_t* priv=reinterpret_cast<priv_t*>(sh->context); - const char* what="AVCodecID"; - if(!priv) priv=new(zeromem) priv_t; - sh->context = priv; - if(!vcodec_inited){ -// avcodec_init(); - avcodec_register_all(); - vcodec_inited=1; - } - enum AVCodecID ff_id = ff_codec_get_id(ff_codec_bmp_tags,fcc); - if (ff_id == AV_CODEC_ID_NONE) { - const char *fourcc; - prn_err: - fourcc=reinterpret_cast<char*>(&fcc); - MSG_ERR("Cannot find %s for '%c%c%c%c' fourcc! Try force -vc option\n" - ,what - ,fourcc[0],fourcc[1],fourcc[2],fourcc[3]); - return NULL; - } - AVCodec *codec=avcodec_find_decoder(ff_id); - if(!codec) { what="AVCodec"; goto prn_err; } - vprobe=new(zeromem) video_probe_t; - vprobe->driver="ffmpeg"; - vprobe->codec_dll=mp_strdup(avcodec_get_name(ff_id)); - if(codec->pix_fmts) - for(i=0;i<Video_MaxOutFmt;i++) { - if(codec->pix_fmts[i]==-1) break; - vprobe->pix_fmt[i]=avcodec_pix_fmt_to_codec_tag(codec->pix_fmts[i]); - vprobe->flags[i]=video_flags_e(flag); - } - if(!i) { vprobe->pix_fmt[i]=IMGFMT_YV12; vprobe->flags[i]=video_flags_e(flag); } - priv->probe=vprobe; - return vprobe; -} - -static MPXP_Rc find_vdecoder(sh_video_t* sh) { - const video_probe_t* vprobe=probe(sh,sh->fourcc); - if(vprobe) { - sh->codec=new(zeromem) struct codecs_st; - strcpy(sh->codec->dll_name,vprobe->codec_dll); - strcpy(sh->codec->driver_name,vprobe->driver); - strcpy(sh->codec->codec_name,sh->codec->dll_name); - memcpy(sh->codec->outfmt,vprobe->pix_fmt,sizeof(vprobe->pix_fmt)); - return MPXP_Ok; - } - return MPXP_False; -} - -extern unsigned xp_num_cpu; -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ - unsigned avc_version=0; - priv_t *priv = reinterpret_cast<priv_t*>(sh->context); - int pp_flags; - if(mp_conf.npp_options) pp2_init(); - if(!vcodec_inited){ -// avcodec_init(); - avcodec_register_all(); - vcodec_inited=1; - } - if(!priv) priv=new(zeromem) priv_t; - sh->context = priv; - priv->frame_number=-2; - if(!sh->codec) if(find_vdecoder(sh)!=MPXP_False) { - MSG_ERR("Can't find ffmpeg decoder\n"); - return MPXP_False; - } - priv->lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh->codec->dll_name); - if(!priv->lavc_codec){ - MSG_ERR(MSGTR_MissingLAVCcodec,sh->codec->dll_name); - return MPXP_False; - } - - priv->ctx = avcodec_alloc_context3(priv->lavc_codec); - priv->lavc_picture = avcodec_alloc_frame(); - if(!(priv->ctx && priv->lavc_picture)) { - MSG_ERR(MSGTR_OutOfMemory); - return MPXP_False; - } - - priv->ctx->width = sh->src_w; - priv->ctx->height= sh->src_h; - // priv->ctx->error_recognition= lavc_param_error_resilience; - priv->ctx->error_concealment= lavc_param_error_concealment; - priv->ctx->debug= lavc_param_debug; - priv->ctx->codec_tag= sh->fourcc; - priv->ctx->stream_codec_tag=sh->video.fccHandler; - priv->ctx->idct_algo=0; /*auto*/ -#if 0 - if (lavc_param_debug) - av_log_set_level(AV_LOG_DEBUG); -#endif - priv->ctx->debug_mv= lavc_param_vismv; - priv->ctx->skip_top = lavc_param_skip_top; - priv->ctx->skip_bottom= lavc_param_skip_bottom; - if(lavc_param_lowres_str != NULL) { - int lowres_w=0; - sscanf(lavc_param_lowres_str, "%d,%d", &lavc_param_lowres, &lowres_w); - if(lavc_param_lowres < 1 || lavc_param_lowres > 16 || (lowres_w > 0 && priv->ctx->width < lowres_w)) - lavc_param_lowres = 0; - priv->ctx->lowres = lavc_param_lowres; - } - priv->ctx->skip_loop_filter = str2AVDiscard(lavc_param_skip_loop_filter_str); - priv->ctx->skip_idct = str2AVDiscard(lavc_param_skip_idct_str); - priv->ctx->skip_frame = str2AVDiscard(lavc_param_skip_frame_str); - if(sh->bih) - priv->ctx->bits_per_coded_sample= sh->bih->biBitCount; - MSG_DBG2("libavcodec.size: %d x %d\n",priv->ctx->width,priv->ctx->height); - /* AVRn stores huffman table in AVI header */ - /* Pegasus MJPEG stores it also in AVI header, but it uses the common - MJPG fourcc :( */ - if (sh->bih && (sh->bih->biSize != sizeof(BITMAPINFOHEADER)) && - (sh->fourcc == mmioFOURCC('A','V','R','n') || - sh->fourcc == mmioFOURCC('M','J','P','G'))) { -// priv->ctx->flags |= CODEC_FLAG_EXTERN_HUFF; - priv->ctx->extradata_size = sh->bih->biSize-sizeof(BITMAPINFOHEADER); - priv->ctx->extradata = new uint8_t [priv->ctx->extradata_size]; - memcpy(priv->ctx->extradata, sh->bih+sizeof(BITMAPINFOHEADER), - priv->ctx->extradata_size); - } - if(sh->fourcc == mmioFOURCC('R', 'V', '1', '0') - || sh->fourcc == mmioFOURCC('R', 'V', '1', '3') - || sh->fourcc == mmioFOURCC('R', 'V', '2', '0') - || sh->fourcc == mmioFOURCC('R', 'V', '3', '0') - || sh->fourcc == mmioFOURCC('R', 'V', '4', '0')) { - priv->ctx->extradata_size= 8; - priv->ctx->extradata = new uint8_t[priv->ctx->extradata_size]; - if(sh->bih->biSize!=sizeof(*sh->bih)+8){ - /* only 1 packet per frame & sub_id from fourcc */ - ((uint32_t*)priv->ctx->extradata)[0] = 0; - ((uint32_t*)priv->ctx->extradata)[1] = - (sh->fourcc == mmioFOURCC('R', 'V', '1', '3')) ? 0x10003001 : 0x10000000; - } else { - /* has extra slice header (demux_rm or rm->avi streamcopy) */ - unsigned int* extrahdr=(unsigned int*)(sh->bih+1); - ((uint32_t*)priv->ctx->extradata)[0] = extrahdr[0]; - ((uint32_t*)priv->ctx->extradata)[1] = extrahdr[1]; - } - } - if (sh->bih && (sh->bih->biSize != sizeof(BITMAPINFOHEADER)) && - (sh->fourcc == mmioFOURCC('M','4','S','2') || - sh->fourcc == mmioFOURCC('M','P','4','S') || - sh->fourcc == mmioFOURCC('H','F','Y','U') || - sh->fourcc == mmioFOURCC('F','F','V','H') || - sh->fourcc == mmioFOURCC('W','M','V','2') || - sh->fourcc == mmioFOURCC('W','M','V','3') || - sh->fourcc == mmioFOURCC('A','S','V','1') || - sh->fourcc == mmioFOURCC('A','S','V','2') || - sh->fourcc == mmioFOURCC('V','S','S','H') || - sh->fourcc == mmioFOURCC('M','S','Z','H') || - sh->fourcc == mmioFOURCC('Z','L','I','B') || - sh->fourcc == mmioFOURCC('M','P','4','V') || - sh->fourcc == mmioFOURCC('F','L','I','C') || - sh->fourcc == mmioFOURCC('S','N','O','W') || - sh->fourcc == mmioFOURCC('a','v','c','1') || - sh->fourcc == mmioFOURCC('L','O','C','O') || - sh->fourcc == mmioFOURCC('t','h','e','o') - )) { - priv->ctx->extradata_size = sh->bih->biSize-sizeof(BITMAPINFOHEADER); - priv->ctx->extradata = new uint8_t [priv->ctx->extradata_size]; - memcpy(priv->ctx->extradata, sh->bih+1, priv->ctx->extradata_size); - } - if (sh->ImageDesc && - sh->fourcc == mmioFOURCC('S','V','Q','3')){ - priv->ctx->extradata_size = *(int*)sh->ImageDesc; - priv->ctx->extradata = new uint8_t [priv->ctx->extradata_size]; - memcpy(priv->ctx->extradata, ((int*)sh->ImageDesc)+1, priv->ctx->extradata_size); - } - /* Pass palette to codec */ -#if 0 - if (sh->bih && (sh->bih->biBitCount <= 8)) { - priv->ctx->palctrl = (AVPaletteControl*)mp_calloc(1,sizeof(AVPaletteControl)); - priv->ctx->palctrl->palette_changed = 1; - if (sh->bih->biSize-sizeof(BITMAPINFOHEADER)) - /* Palette size in biSize */ - memcpy(priv->ctx->palctrl->palette, sh->bih+1, - std::min(sh->bih->biSize-sizeof(BITMAPINFOHEADER), AVPALETTE_SIZE)); - else - /* Palette size in biClrUsed */ - memcpy(priv->ctx->palctrl->palette, sh->bih+1, - std::min(sh->bih->biClrUsed * 4, AVPALETTE_SIZE)); - } -#endif - if(sh->bih) - priv->ctx->bits_per_coded_sample= sh->bih->biBitCount; - -#ifdef _OPENMP - /* Note: Slices have effect on UNI-processor machines only */ - if(enable_ffslices && omp_get_num_procs()>1 && mp_conf.gomp) enable_ffslices=0; -#endif - if(priv->lavc_codec->capabilities&CODEC_CAP_DRAW_HORIZ_BAND && enable_ffslices) priv->cap_slices=1; -/* enable DR1 method */ - if(priv->lavc_codec->capabilities&CODEC_CAP_DR1) priv->cap_dr1=1; - priv->ctx->flags|= CODEC_FLAG_EMU_EDGE; - - if(lavc_param_threads < 0) lavc_param_threads = xp_num_cpu; - if(lavc_param_threads > 1) { - priv->ctx->thread_count = lavc_param_threads; - MSG_STATUS("Using %i threads in FFMPEG\n",lavc_param_threads); - } - /* open it */ - if (avcodec_open2(priv->ctx, priv->lavc_codec, NULL) < 0) { - MSG_ERR(MSGTR_CantOpenCodec); - return MPXP_False; - } - MSG_V("INFO: libavcodec.so (%06X) video codec[%c%c%c%c] init OK!\n" - ,avc_version - ,((char *)&sh->fourcc)[0],((char *)&sh->fourcc)[1],((char *)&sh->fourcc)[2],((char *)&sh->fourcc)[3]); - if(mp_conf.npp_options) { - pp_flags=0; - switch(sh->codec->outfmt[sh->outfmtidx]) { - case IMGFMT_YV12: - case IMGFMT_I420: - case IMGFMT_IYUV: pp_flags = PP_FORMAT_420; - break; - case IMGFMT_YVYU: - case IMGFMT_YUY2: pp_flags = PP_FORMAT_422; - break; - case IMGFMT_411P: pp_flags = PP_FORMAT_411; - break; - default: { - const char *fmt; - fmt = (const char *)&sh->codec->outfmt[sh->outfmtidx]; - MSG_WARN("Can't apply postprocessing for"); - if(isprint(fmt[0]) && isprint(fmt[1]) && isprint(fmt[2]) && isprint(fmt[3])) - MSG_WARN(" '%c%c%c%c'!\n",fmt[0],fmt[1],fmt[2],fmt[3]); - else MSG_ERR(" 0x%08X!\n",sh->codec->outfmt[sh->outfmtidx]); - break; - } - } - if(pp_flags) ppContext=pp2_get_context(sh->src_w,sh->src_h,pp_flags); - } - return mpcodecs_config_vo(sh,sh->src_w,sh->src_h,libinput); -} - -// uninit driver -static void uninit(sh_video_t *sh){ - priv_t *priv=reinterpret_cast<priv_t*>(sh->context); - if (avcodec_close(priv->ctx) < 0) - MSG_ERR( MSGTR_CantCloseCodec); - if (priv->ctx->extradata_size) - delete priv->ctx->extradata; - delete priv->ctx; - delete priv->lavc_picture; - if(priv->probe) { delete priv->probe->codec_dll; delete priv->probe; } - delete priv; - if(ppContext) pp_free_context(ppContext); - ppContext=NULL; - pp2_uninit(); - vcodec_inited=0; -} - -static int get_buffer(AVCodecContext *avctx, AVFrame *pic){ - sh_video_t * sh = reinterpret_cast<sh_video_t*>(avctx->opaque); - priv_t *priv = reinterpret_cast<priv_t*>(sh->context); - mp_image_t* mpi=NULL; - int flags= MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE; - int type= MP_IMGTYPE_IPB; - int width= avctx->width; - int height= avctx->height; - int align=15; -//printf("get_buffer %d %d %d\n", pic->reference, ctx->ip_count, ctx->b_count); - if(avctx->pix_fmt == PIX_FMT_YUV410P) - align=63; //yes seriously, its really needed (16x16 chroma blocks in SVQ1 -> 64x64) - - if (pic->buffer_hints) { - MSG_DBG2( "Buffer hints: %u\n", pic->buffer_hints); - type = MP_IMGTYPE_TEMP; - if (pic->buffer_hints & FF_BUFFER_HINTS_READABLE) - flags |= MP_IMGFLAG_READABLE; - if (pic->buffer_hints & FF_BUFFER_HINTS_PRESERVE) { - type = MP_IMGTYPE_STATIC; - flags |= MP_IMGFLAG_PRESERVE; - } - if (pic->buffer_hints & FF_BUFFER_HINTS_REUSABLE) { - type = MP_IMGTYPE_STATIC; - flags |= MP_IMGFLAG_PRESERVE; - } - flags|=((avctx->skip_frame==AVDISCARD_NONE) && priv->use_slices) ? - MP_IMGFLAG_DRAW_CALLBACK:0; - MSG_DBG2( type == MP_IMGTYPE_STATIC ? "using STATIC\n" : "using TEMP\n"); - } else { - if(!pic->reference){ - priv->b_count++; - flags|=((avctx->skip_frame==AVDISCARD_NONE) && priv->use_slices) ? - MP_IMGFLAG_DRAW_CALLBACK:0; - }else{ - priv->ip_count++; - flags|= MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE - | (priv->use_slices ? MP_IMGFLAG_DRAW_CALLBACK : 0); - } - } - - if (!pic->buffer_hints) { - if(priv->b_count>1 || priv->ip_count>2){ - MSG_WARN("DR1 failure\n"); - priv->use_dr1=0; //FIXME - avctx->get_buffer= avcodec_default_get_buffer; - return avctx->get_buffer(avctx, pic); - } - if(avctx->has_b_frames){ - type= MP_IMGTYPE_IPB; - }else{ - type= MP_IMGTYPE_IP; - } - MSG_DBG2( type== MP_IMGTYPE_IPB ? "using IPB\n" : "using IP\n"); - } - - MSG_V("ff width=%i height=%i\n",width,height); - mpi= mpcodecs_get_image(sh,type, flags, (width+align)&(~align), (height+align)&(~align)); - if(mpi->flags & MP_IMGFLAG_DIRECT) mpi->flags |= MP_IMGFLAG_RENDERED; - // Palette support: libavcodec copies palette to *data[1] - if (mpi->bpp == 8) mpi->planes[1] = new unsigned char [AVPALETTE_SIZE]; - - pic->data[0]= mpi->planes[0]; - pic->data[1]= mpi->planes[1]; - pic->data[2]= mpi->planes[2]; - - /* Note, some (many) codecs in libavcodec must have stride1==stride2 && no changes between frames - * lavc will check that and die with an error message, if its not true - */ - pic->linesize[0]= mpi->stride[0]; - pic->linesize[1]= mpi->stride[1]; - pic->linesize[2]= mpi->stride[2]; - - pic->opaque = mpi; - - if(pic->reference) { -// pic->age= priv->ip_age[0]; - priv->ip_age[0]= priv->ip_age[1]+1; - priv->ip_age[1]= 1; - priv->b_age++; - } else { -// pic->age= priv->b_age; - priv->ip_age[0]++; - priv->ip_age[1]++; - priv->b_age=1; - } - pic->type= FF_BUFFER_TYPE_USER; - return 0; -} - -static void release_buffer(struct AVCodecContext *avctx, AVFrame *pic){ - mp_image_t* mpi= reinterpret_cast<mp_image_t*>(pic->opaque); - sh_video_t * sh = reinterpret_cast<sh_video_t*>(avctx->opaque); - priv_t *priv = reinterpret_cast<priv_t*>(sh->context); - int i; - - if(priv->ip_count <= 2 && priv->b_count<=1){ - if(mpi->flags&MP_IMGFLAG_PRESERVE) - priv->ip_count--; - else - priv->b_count--; - } - - if(mpi) { - if(mpi->bpp == 8 && mpi->planes[1]) delete mpi->planes[1]; - if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK) free_mp_image(mpi); - } - - if(pic->type!=FF_BUFFER_TYPE_USER){ - avcodec_default_release_buffer(avctx, pic); - return; - } - - for(i=0; i<4; i++){ - pic->data[i]= NULL; - } -//printf("R%X %X\n", pic->linesize[0], pic->data[0]); -} - - -static void draw_slice(struct AVCodecContext *s, - const AVFrame *src, int offset[4], - int y, int type, int height) -{ - UNUSED(offset); - UNUSED(type); - sh_video_t *sh=reinterpret_cast<sh_video_t*>(s->opaque); - priv_t *priv=reinterpret_cast<priv_t*>(sh->context); - mp_image_t *mpi=priv->mpi; - unsigned long long int total_frame; - unsigned orig_idx = mpi->xp_idx; - /* sync-point*/ - if(src->pict_type==AV_PICTURE_TYPE_I) priv->frame_number = src->coded_picture_number; - total_frame = priv->frame_number; - if(priv->use_dr1) { MSG_DBG2("Ignoring draw_slice due dr1\n"); return; } /* we may call vo_start_slice() here */ -// mpi=mpcodecs_get_image(sh,MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_DRAW_CALLBACK|MP_IMGFLAG_DIRECT,s->width,s->height); - - mpi->stride[0]=src->linesize[0]; - mpi->stride[1]=src->linesize[1]; - mpi->stride[2]=src->linesize[2]; - mpi->planes[0] = src->data[0]; - mpi->planes[1] = src->data[1]; - mpi->planes[2] = src->data[2]; - mpi->w=s->width; - mpi->y=y; - mpi->h=height; - mpi->chroma_height = height >> mpi->chroma_y_shift; - /* provide info for pp */ - mpi->qscale=(char *)priv->lavc_picture->qscale_table; - mpi->qstride=priv->lavc_picture->qstride; - mpi->pict_type=priv->lavc_picture->pict_type; - mpi->qscale_type=priv->lavc_picture->qscale_type; - - if(sh->codec->outfmt[sh->outfmtidx] == IMGFMT_I420 || - sh->codec->outfmt[sh->outfmtidx] == IMGFMT_IYUV) - { - uint8_t *tmp; - unsigned ls; - tmp=mpi->planes[2]; - mpi->planes[2]=mpi->planes[1]; - mpi->planes[1]=tmp; - ls=mpi->stride[2]; - mpi->stride[2]=mpi->stride[1]; - mpi->stride[1]=ls; - } -#if 0 - /* handle IPB-frames here */ - if(total_frame!=src->coded_picture_number) { - unsigned long long int tf = total_frame; - /* we can do only 1 step forward */ - if(total_frame<src->coded_picture_number) - mpi->xp_idx = vo_get_decoding_next_frame(mpi->xp_idx); - else - while(tf>src->coded_picture_number) { - mpi->xp_idx = vo_get_decoding_prev_frame(mpi->xp_idx); - tf--; - } - } -#endif - MSG_DBG2("ff_draw_callback<%u->%u:%u:%u-%s>[%ux%u] %i %i %i %i\n", - orig_idx,mpi->xp_idx,(unsigned)total_frame,src->coded_picture_number, - src->pict_type==AV_PICTURE_TYPE_BI?"bi": - src->pict_type==AV_PICTURE_TYPE_SP?"sp": - src->pict_type==AV_PICTURE_TYPE_SI?"si": - src->pict_type==AV_PICTURE_TYPE_S?"s": - src->pict_type==AV_PICTURE_TYPE_B?"b": - src->pict_type==AV_PICTURE_TYPE_P?"p": - src->pict_type==AV_PICTURE_TYPE_I?"i":"??" - ,mpi->width,mpi->height,mpi->x,mpi->y,mpi->w,mpi->h); - __MP_ATOMIC(sh->active_slices++); - mpcodecs_draw_slice (sh, mpi); - mpi->xp_idx = orig_idx; - __MP_ATOMIC(sh->active_slices--); -} - -/* copypaste from demux_real.c - it should match to get it working!*/ - -typedef struct __attribute__((__packed__)) dp_hdr_s { - uint32_t chunks; - uint32_t timestamp; - uint32_t len; - uint32_t chunktab; -} dp_hdr_t; - -// decode a frame -static mp_image_t* decode(sh_video_t *sh,const enc_frame_t* frame){ - int got_picture=0; - int ret,has_b_frames; - unsigned len=frame->len; - any_t* data=frame->data; - priv_t *priv=reinterpret_cast<priv_t*>(sh->context); - mp_image_t* mpi=NULL; - - priv->ctx->opaque=sh; - if(frame->len<=0) return NULL; // skipped frame - - priv->ctx->skip_frame=(frame->flags&3)?((frame->flags&2)?AVDISCARD_NONKEY:AVDISCARD_DEFAULT):AVDISCARD_NONE; - if(priv->cap_slices) priv->use_slices= !(sh->vf_flags&VF_FLAGS_SLICES)?0:(priv->ctx->skip_frame!=AVDISCARD_NONE)?0:1; - else priv->use_slices=0; -/* - if codec is capable DR1 - if sh->vfilter==vf_vo (DR1 is meaningless into temp buffer) - It always happens with (vidix+bus mastering), (if (src_w%16==0)) with xv -*/ - has_b_frames=priv->ctx->has_b_frames|| - sh->fourcc==0x10000001 || /* mpeg1 may have b frames */ - priv->lavc_codec->id==CODEC_ID_SVQ3|| - 1; - mpi= mpcodecs_get_image(sh,has_b_frames?MP_IMGTYPE_IPB:MP_IMGTYPE_IP,MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_PREFER_ALIGNED_STRIDE|MP_IMGFLAG_READABLE|MP_IMGFLAG_PRESERVE, - 16,16); - if(priv->cap_dr1 && - priv->lavc_codec->id != CODEC_ID_H264 && - priv->use_slices && mpi->flags&MP_IMGFLAG_DIRECT) - priv->use_dr1=1; - if(has_b_frames) { - MSG_V("Disable slice-based rendering in FFMPEG due possible B-frames in video-stream\n"); - priv->use_slices=0; - } - if(priv->use_slices) priv->use_dr1=0; - if( sh->fourcc == mmioFOURCC('R', 'V', '1', '0') - || sh->fourcc == mmioFOURCC('R', 'V', '1', '3') - || sh->fourcc == mmioFOURCC('R', 'V', '2', '0') - || sh->fourcc == mmioFOURCC('R', 'V', '3', '0') - || sh->fourcc == mmioFOURCC('R', 'V', '4', '0')) - if(sh->bih->biSize==sizeof(*sh->bih)+8){ - int i; - const dp_hdr_t *hdr= (const dp_hdr_t*)data; - - if(priv->ctx->slice_offset==NULL) - priv->ctx->slice_offset= new int [1000]; - -// for(i=0; i<25; i++) printf("%02X ", ((uint8_t*)data)[i]); - - priv->ctx->slice_count= hdr->chunks+1; - for(i=0; i<priv->ctx->slice_count; i++) - priv->ctx->slice_offset[i]= ((const uint32_t*)(data+hdr->chunktab))[2*i+1]; - len=hdr->len; - data=reinterpret_cast<any_t*>(reinterpret_cast<long>(data)+sizeof(dp_hdr_t)); - } - if(priv->use_dr1){ - priv->b_age= priv->ip_age[0]= priv->ip_age[1]= 256*256*256*64; - priv->ip_count= priv->b_count= 0; - priv->ctx->get_buffer= get_buffer; - priv->ctx->release_buffer= release_buffer; - priv->ctx->reget_buffer= get_buffer; - } - if(!(frame->flags&3) && priv->use_slices) - { - if(mpi) free_mp_image(mpi); - mpi=mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_DRAW_CALLBACK|MP_IMGFLAG_DIRECT,sh->src_w, sh->src_h); - priv->mpi = mpi; - priv->frame_number++; - priv->ctx->draw_horiz_band=draw_slice; - } - else priv->ctx->draw_horiz_band=NULL; /* skip draw_slice on framedropping */ - if(!priv->hello_printed) { - if(priv->use_slices) - MSG_STATUS("Use slice-based rendering in FFMPEG\n"); - else if (priv->use_dr1) - MSG_STATUS("Use DR1 rendering in FFMPEG\n"); - else - priv->hello_printed=1; - } - AVPacket pkt; - av_init_packet(&pkt); - pkt.data=reinterpret_cast<uint8_t*>(data); - pkt.size=len; - ret = avcodec_decode_video2(priv->ctx, priv->lavc_picture, - &got_picture, &pkt); - if(ret<0) MSG_WARN("Error while decoding frame!\n"); - if(!got_picture) return NULL; // skipped image - if(!priv->ctx->draw_horiz_band) - { - if(mpi) free_mp_image(mpi); - mpi=mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,sh->src_w,sh->src_h); - if(!mpi){ // temporary! - MSG_ERR("couldn't allocate image for ffmpeg codec\n"); - return NULL; - } - mpi->planes[0]=priv->lavc_picture->data[0]; - mpi->planes[1]=priv->lavc_picture->data[1]; - mpi->planes[2]=priv->lavc_picture->data[2]; - mpi->stride[0]=priv->lavc_picture->linesize[0]; - mpi->stride[1]=priv->lavc_picture->linesize[1]; - mpi->stride[2]=priv->lavc_picture->linesize[2]; - /* provide info for pp */ - mpi->qscale=(char *)priv->lavc_picture->qscale_table; - mpi->qstride=priv->lavc_picture->qstride; - mpi->pict_type=priv->lavc_picture->pict_type; - mpi->qscale_type=priv->lavc_picture->qscale_type; - /* - if(sh->codec->outfmt[sh->outfmtidx] == IMGFMT_I420 || - sh->codec->outfmt[sh->outfmtidx] == IMGFMT_IYUV) - { - uint8_t *tmp; - unsigned ls; - tmp=mpi->planes[2]; - mpi->planes[2]=mpi->planes[1]; - mpi->planes[1]=tmp; - ls=mpi->stride[2]; - mpi->stride[2]=mpi->stride[1]; - mpi->stride[1]=ls; - }*/ - if(priv->ctx->pix_fmt==PIX_FMT_YUV422P){ - mpi->stride[1]*=2; - mpi->stride[2]*=2; - } - } /* endif use_slices */ - return mpi; -} - Copied: mplayerxp/libmpcodecs/vd_lavc.cpp (from rev 437, mplayerxp/libmpcodecs/vd_ffmpeg.cpp) =================================================================== --- mplayerxp/libmpcodecs/vd_lavc.cpp (rev 0) +++ mplayerxp/libmpcodecs/vd_lavc.cpp 2012-11-23 11:55:38 UTC (rev 441) @@ -0,0 +1,780 @@ +#include <algorithm> + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <dlfcn.h> /* GLIBC specific. Exists under cygwin too! */ + +#include "mp_config.h" +#include "mplayerxp.h" +#include "xmpcore/xmp_core.h" +#ifdef HAVE_GOMP +#include <omp.h> +#endif + +#include "help_mp.h" + +#include "osdep/bswap.h" +#include "osdep/mplib.h" + +#include "vd_internal.h" +#include "codecs_ld.h" +#include "postproc/postprocess.h" +#include "postproc/vf.h" +#include "libvo/video_out.h" +#include "osdep/bswap.h" + +using namespace mpxp; + +static const vd_info_t info = { + "lavc codec family", + "lavc", + "A'rpi", + "build-in" +}; + +static int lavc_param_error_resilience=2; +static int lavc_param_error_concealment=3; +static int lavc_param_vstats=0; +static int lavc_param_idct_algo=0; +static int lavc_param_debug=0; +static int lavc_param_vismv=0; +static int lavc_param_skip_top=0; +static int lavc_param_skip_bottom=0; +static int lavc_param_lowres=0; +static char *lavc_param_lowres_str=NULL; +static char *lavc_param_skip_loop_filter_str = NULL; +static char *lavc_param_skip_idct_str = NULL; +static char *lavc_param_skip_frame_str = NULL; +static int lavc_param_threads=-1; +static char *lavc_avopt = NULL; + +static int enable_ffslices=1; +static const config_t ff_options[] = { + {"slices", &enable_ffslices, CONF_TYPE_FLAG, 0, 0, 1, "enables slice-based method of frame rendering in lavc decoder"}, + {"noslices", &enable_ffslices, CONF_TYPE_FLAG, 0, 1, 0, "disables slice-based method of frame rendering in lavc decoder"}, + {"er", &lavc_param_error_resilience, CONF_TYPE_INT, CONF_RANGE, 0, 99, "specifies error resilience for lavc decoders"}, + {"idct", &lavc_param_idct_algo, CONF_TYPE_INT, CONF_RANGE, 0, 99, "specifies idct algorithm for lavc decoders"}, + {"ec", &lavc_param_error_concealment, CONF_TYPE_INT, CONF_RANGE, 0, 99, "specifies error concealment for lavc decoders"}, + {"vstats", &lavc_param_vstats, CONF_TYPE_FLAG, 0, 0, 1, "specifies vstat for lavc decoders"}, + {"debug", &lavc_param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 9999999, "specifies debug level for lavc decoders"}, + {"vismv", &lavc_param_vismv, CONF_TYPE_INT, CONF_RANGE, 0, 9999999, "specifies visualize motion vectors (MVs) for lavc decoders"}, + {"st", &lavc_param_skip_top, CONF_TYPE_INT, CONF_RANGE, 0, 999, "specifies skipping top lines for lavc decoders"}, + {"sb", &lavc_param_skip_bottom, CONF_TYPE_INT, CONF_RANGE, 0, 999, "specifies skipping bottom lines for lavc decoders"}, + {"lowres", &lavc_param_lowres_str, CONF_TYPE_STRING, 0, 0, 0, "specifies decoding at 1= 1/2, 2=1/4, 3=1/8 resolutions for lavc decoders"}, + {"skiploopfilter", &lavc_param_skip_loop_filter_str, CONF_TYPE_STRING, 0, 0, 0, "specifies skipping of loop filters for lavc decoders"}, + {"skipidct", &lavc_param_skip_idct_str, CONF_TYPE_STRING, 0, 0, 0, "specifies skipping of IDCT filters for lavc decoders"}, + {"skipframe", &lavc_param_skip_frame_str, CONF_TYPE_STRING, 0, 0, 0, "indicates frame skipping for lavc decoders"}, + {"threads", &lavc_param_threads, CONF_TYPE_INT, CONF_RANGE, 1, 8, "specifies number of threads for lavc decoders"}, + {"o", &lavc_avopt, CONF_TYPE_STRING, 0, 0, 0, "specifies additional option for lavc decoders"}, + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +static const config_t options[] = { + {"lavc", (any_t*)&ff_options, CONF_TYPE_SUBCONFIG, 0, 0, 0, "lavc specific options"}, + { NULL, NULL, 0, 0, 0, 0, NULL} +}; + +LIBVD_EXTERN(lavc) + +#include "libavcodec/avcodec.h" +#include "libavformat/riff.h" +#include "libvo/video_out.h" + + +static int vcodec_inited=0; +typedef struct priv_s { + int use_slices; + int cap_slices; + int use_dr1; + int cap_dr1; + AVCodec *lavc_codec; + AVCodecContext *ctx; + AVFrame *lavc_picture; + mp_image_t* mpi; + unsigned long long frame_number; /* total frame number since begin of movie */ + int b_age; + int ip_age[2]; + int qp_stat[32]; +// double qp_sum; +// double inv_qp_sum; + int ip_count; + int b_count; + int vo_inited; + int hello_printed; + video_probe_t* probe; +}priv_t; +static pp_context* ppContext=NULL; +static void draw_slice(struct AVCodecContext *s, const AVFrame *src, int offset[4], int y, int type, int height); + +static enum AVDiscard str2AVDiscard(char *str) { + if (!str) return AVDISCARD_DEFAULT; + if (strcasecmp(str, "none" ) == 0) return AVDISCARD_NONE; + if (strcasecmp(str, "default") == 0) return AVDISCARD_DEFAULT; + if (strcasecmp(str, "nonref" ) == 0) return AVDISCARD_NONREF; + if (strcasecmp(str, "bidir" ) == 0) return AVDISCARD_BIDIR; + if (strcasecmp(str, "nonkey" ) == 0) return AVDISCARD_NONKEY; + if (strcasecmp(str, "all" ) == 0) return AVDISCARD_ALL; + MSG_ERR("Unknown discard value %s\n", str); + return AVDISCARD_DEFAULT; +} + +/* stupid workaround for current version of lavc */ +const __attribute((used)) uint8_t last_coeff_flag_offset_8x8[63] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2... [truncated message content] |
From: <nic...@us...> - 2012-11-24 09:41:59
|
Revision: 446 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=446&view=rev Author: nickols_k Date: 2012-11-24 09:41:49 +0000 (Sat, 24 Nov 2012) Log Message: ----------- more non-POD objects Modified Paths: -------------- mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out.h mplayerxp/libvo/vo_dga.cpp mplayerxp/libvo/vo_fbdev.cpp mplayerxp/libvo/vo_null.cpp mplayerxp/libvo/vo_opengl.cpp mplayerxp/libvo/vo_sdl.cpp mplayerxp/libvo/vo_vesa.cpp mplayerxp/libvo/vo_x11.cpp mplayerxp/libvo/vo_xv.cpp mplayerxp/libvo/vosub_vidix.cpp mplayerxp/libvo/x11_common.cpp mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/osdep/mplib.h Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-24 07:35:40 UTC (rev 445) +++ mplayerxp/libvo/video_out.cpp 2012-11-24 09:41:49 UTC (rev 446) @@ -47,7 +47,14 @@ #include "sub.h" #include "vo_msg.h" -vo_conf_t vo_conf; +VO_Config::VO_Config() { + memset(&subdevice,0,reinterpret_cast<long>(&dbpp) - reinterpret_cast<long>(&subdevice)); + movie_aspect=-1.0; + flip=-1; + xp_buffs=64; + dbpp=0; +} +VO_Config vo_conf; // // Externally visible list of all vo drivers @@ -116,7 +123,10 @@ unsigned off[4]; /* offsets for y,u,v if DR on non fully fitted surface */ }dri_priv_t; -typedef struct vo_priv_s { +struct vo_priv_t : public video_private { + vo_priv_t(); + virtual ~vo_priv_t(); + char antiviral_hole[RND_CHAR8]; uint32_t srcFourcc,image_format,image_width,image_height; uint32_t org_width,org_height; @@ -127,8 +137,20 @@ dri_priv_t dri; const vo_functions_t * video_out; draw_alpha_f draw_alpha; -}vo_priv_t; +}; +vo_priv_t::vo_priv_t() { + pthread_mutexattr_t attr; + rnd_fill(antiviral_hole,reinterpret_cast<long>(&srcFourcc)-reinterpret_cast<long>(antiviral_hole)); + pthread_mutexattr_init(&attr); + pthread_mutex_init(&surfaces_mutex,&attr); + dri.num_xp_frames=1; +} + +vo_priv_t::~vo_priv_t() { + pthread_mutex_destroy(&surfaces_mutex); +} + void vo_print_help(vo_data_t*vo) { unsigned i; @@ -143,56 +165,48 @@ const vo_functions_t* vo_register(vo_data_t*vo,const char *driver_name) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - if(!driver_name) priv->video_out=video_out_drivers[0]; + if(!driver_name) priv.video_out=video_out_drivers[0]; else for (i=0; video_out_drivers[i] != &video_out_null; i++){ const vo_info_t *info = video_out_drivers[i]->get_info (vo); if(strcmp(info->short_name,driver_name) == 0){ - priv->video_out = video_out_drivers[i];break; + priv.video_out = video_out_drivers[i]; + break; } } - return priv->video_out; + return priv.video_out; } const vo_info_t* vo_get_info(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - return priv->video_out->get_info(vo); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + return priv.video_out->get_info(vo); } vo_data_t* __FASTCALL__ vo_preinit_structs( void ) { vo_data_t* vo; - pthread_mutexattr_t attr; - memset(&vo_conf,0,sizeof(vo_conf_t)); - vo_conf.movie_aspect=-1.0; - vo_conf.flip=-1; - vo_conf.xp_buffs=64; - vo=new(zeromem) vo_data_t; vo->window = None; vo->osd_progbar_type=-1; vo->osd_progbar_value=100; // 0..256 - vo->vo_priv=new(zeromem) vo_priv_t; - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - rnd_fill(priv->antiviral_hole,offsetof(vo_priv_t,srcFourcc)-offsetof(vo_priv_t,antiviral_hole)); - pthread_mutexattr_init(&attr); - pthread_mutex_init(&priv->surfaces_mutex,&attr); - priv->dri.num_xp_frames=1; + vo_priv_t* priv; + priv=new(zeromem) vo_priv_t; + vo->vo_priv=priv; rnd_fill(vo->antiviral_hole,offsetof(vo_data_t,mScreen)-offsetof(vo_data_t,antiviral_hole)); return vo; } MPXP_Rc __FASTCALL__ vo_init(vo_data_t*vo,const char *subdevice) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_init(%s)\n",subdevice); - priv->frame_counter=0; - return priv->video_out->preinit(vo,subdevice); + priv.frame_counter=0; + return priv.video_out->preinit(vo,subdevice); } int __FASTCALL__ vo_describe_fourcc(uint32_t fourcc,vo_format_desc *vd) @@ -262,132 +276,132 @@ static void __FASTCALL__ dri_config(vo_data_t*vo,uint32_t fourcc) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - priv->dri.is_planar = vo_describe_fourcc(fourcc,&priv->vod); - priv->dri.bpp=priv->vod.bpp; - if(!priv->dri.bpp) priv->dri.has_dri=0; /*unknown fourcc*/ - if(priv->dri.has_dri) + priv.dri.is_planar = vo_describe_fourcc(fourcc,&priv.vod); + priv.dri.bpp=priv.vod.bpp; + if(!priv.dri.bpp) priv.dri.has_dri=0; /*unknown fourcc*/ + if(priv.dri.has_dri) { - priv->video_out->control(vo,VOCTRL_GET_NUM_FRAMES,&priv->dri.num_xp_frames); - priv->dri.num_xp_frames=std::min(priv->dri.num_xp_frames,unsigned(MAX_DRI_BUFFERS)); - for(i=0;i<priv->dri.num_xp_frames;i++) + priv.video_out->control(vo,VOCTRL_GET_NUM_FRAMES,&priv.dri.num_xp_frames); + priv.dri.num_xp_frames=std::min(priv.dri.num_xp_frames,unsigned(MAX_DRI_BUFFERS)); + for(i=0;i<priv.dri.num_xp_frames;i++) { - priv->dri.surf[i].idx=i; - priv->video_out->control(vo,DRI_GET_SURFACE,&priv->dri.surf[i]); + priv.dri.surf[i].idx=i; + priv.video_out->control(vo,DRI_GET_SURFACE,&priv.dri.surf[i]); } } } static void __FASTCALL__ ps_tune(vo_data_t*vo,unsigned width,unsigned height) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); int src_is_planar; unsigned src_stride,ps_x,ps_y; vo_format_desc vd; - ps_x = (priv->org_width - width)/2; - ps_y = (priv->org_height - height)/2; - src_is_planar = vo_describe_fourcc(priv->srcFourcc,&vd); - src_stride=src_is_planar?priv->org_width:priv->org_width*((vd.bpp+7)/8); - priv->ps_off[0] = priv->ps_off[1] = priv->ps_off[2] = priv->ps_off[3] = 0; + ps_x = (priv.org_width - width)/2; + ps_y = (priv.org_height - height)/2; + src_is_planar = vo_describe_fourcc(priv.srcFourcc,&vd); + src_stride=src_is_planar?priv.org_width:priv.org_width*((vd.bpp+7)/8); + priv.ps_off[0] = priv.ps_off[1] = priv.ps_off[2] = priv.ps_off[3] = 0; if(!src_is_planar) - priv->ps_off[0] = ps_y*src_stride+ps_x*((vd.bpp+7)/8); + priv.ps_off[0] = ps_y*src_stride+ps_x*((vd.bpp+7)/8); else { - priv->ps_off[0] = ps_y*src_stride+ps_x; + priv.ps_off[0] = ps_y*src_stride+ps_x; if(vd.bpp==12) /*YV12 series*/ { - priv->ps_off[1] = (ps_y/2)*(src_stride/2)+ps_x/2; - priv->ps_off[2] = (ps_y/2)*(src_stride/2)+ps_x/2; + priv.ps_off[1] = (ps_y/2)*(src_stride/2)+ps_x/2; + priv.ps_off[2] = (ps_y/2)*(src_stride/2)+ps_x/2; } else if(vd.bpp==9) /*YVU9 series*/ { - priv->ps_off[1] = (ps_y/4)*(src_stride/4)+ps_x/4; - priv->ps_off[2] = (ps_y/4)*(src_stride/4)+ps_x/4; + priv.ps_off[1] = (ps_y/4)*(src_stride/4)+ps_x/4; + priv.ps_off[2] = (ps_y/4)*(src_stride/4)+ps_x/4; } } } static void __FASTCALL__ dri_tune(vo_data_t*vo,unsigned width,unsigned height) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - priv->dri.sstride=priv->dri.is_planar?width:width*((priv->dri.bpp+7)/8); - priv->dri.off[0] = priv->dri.off[1] = priv->dri.off[2] = priv->dri.off[3] = 0; - if(!priv->dri.is_planar) + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + priv.dri.sstride=priv.dri.is_planar?width:width*((priv.dri.bpp+7)/8); + priv.dri.off[0] = priv.dri.off[1] = priv.dri.off[2] = priv.dri.off[3] = 0; + if(!priv.dri.is_planar) { - priv->dri.planes_eq = priv->dri.sstride == priv->dri.cap.strides[0]; - priv->dri.off[0] = priv->dri.cap.y*priv->dri.cap.strides[0]+priv->dri.cap.x*((priv->dri.bpp+7)/8); + priv.dri.planes_eq = priv.dri.sstride == priv.dri.cap.strides[0]; + priv.dri.off[0] = priv.dri.cap.y*priv.dri.cap.strides[0]+priv.dri.cap.x*((priv.dri.bpp+7)/8); } else { unsigned long y_off,u_off,v_off; - y_off = (unsigned long)priv->dri.surf[0].planes[0]; - u_off = (unsigned long)std::min(priv->dri.surf[0].planes[1],priv->dri.surf[0].planes[2]); - v_off = (unsigned long)std::max(priv->dri.surf[0].planes[1],priv->dri.surf[0].planes[2]); - priv->dri.off[0] = priv->dri.cap.y*priv->dri.cap.strides[0]+priv->dri.cap.x; - if(priv->dri.bpp==12) /*YV12 series*/ + y_off = (unsigned long)priv.dri.surf[0].planes[0]; + u_off = (unsigned long)std::min(priv.dri.surf[0].planes[1],priv.dri.surf[0].planes[2]); + v_off = (unsigned long)std::max(priv.dri.surf[0].planes[1],priv.dri.surf[0].planes[2]); + priv.dri.off[0] = priv.dri.cap.y*priv.dri.cap.strides[0]+priv.dri.cap.x; + if(priv.dri.bpp==12) /*YV12 series*/ { - priv->dri.planes_eq = width == priv->dri.cap.strides[0] && + priv.dri.planes_eq = width == priv.dri.cap.strides[0] && width*height == u_off - y_off && width*height*5/4 == v_off - y_off && - priv->dri.cap.strides[0]/2 == priv->dri.cap.strides[1] && - priv->dri.cap.strides[0]/2 == priv->dri.cap.strides[2]; - priv->dri.off[1] = (priv->dri.cap.y/2)*priv->dri.cap.strides[1]+priv->dri.cap.x/2; - priv->dri.off[2] = (priv->dri.cap.y/2)*priv->dri.cap.strides[2]+priv->dri.cap.x/2; + priv.dri.cap.strides[0]/2 == priv.dri.cap.strides[1] && + priv.dri.cap.strides[0]/2 == priv.dri.cap.strides[2]; + priv.dri.off[1] = (priv.dri.cap.y/2)*priv.dri.cap.strides[1]+priv.dri.cap.x/2; + priv.dri.off[2] = (priv.dri.cap.y/2)*priv.dri.cap.strides[2]+priv.dri.cap.x/2; } else - if(priv->dri.bpp==9) /*YVU9 series*/ + if(priv.dri.bpp==9) /*YVU9 series*/ { - priv->dri.planes_eq = width == priv->dri.cap.strides[0] && + priv.dri.planes_eq = width == priv.dri.cap.strides[0] && width*height == u_off - y_off && width*height*17/16 == v_off - y_off && - priv->dri.cap.strides[0]/4 == priv->dri.cap.strides[1] && - priv->dri.cap.strides[0]/4 == priv->dri.cap.strides[2]; - priv->dri.off[1] = (priv->dri.cap.y/4)*priv->dri.cap.strides[1]+priv->dri.cap.x/4; - priv->dri.off[2] = (priv->dri.cap.y/4)*priv->dri.cap.strides[2]+priv->dri.cap.x/4; + priv.dri.cap.strides[0]/4 == priv.dri.cap.strides[1] && + priv.dri.cap.strides[0]/4 == priv.dri.cap.strides[2]; + priv.dri.off[1] = (priv.dri.cap.y/4)*priv.dri.cap.strides[1]+priv.dri.cap.x/4; + priv.dri.off[2] = (priv.dri.cap.y/4)*priv.dri.cap.strides[2]+priv.dri.cap.x/4; } else - if(priv->dri.bpp==8) /*Y800 series*/ - priv->dri.planes_eq = width == priv->dri.cap.strides[0]; + if(priv.dri.bpp==8) /*Y800 series*/ + priv.dri.planes_eq = width == priv.dri.cap.strides[0]; } - priv->dri.accel=(priv->dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| + priv.dri.accel=(priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER))== (DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER); - priv->dri.dr = priv->srcFourcc == priv->dri.cap.fourcc && !(priv->dri.flags & VOFLG_FLIP) && - !priv->ps_off[0] && !priv->ps_off[1] && !priv->ps_off[2] && !priv->ps_off[3]; - if(priv->dri.dr && priv->dri.cap.w < width) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER)?1:0; - if(priv->dri.dr && priv->dri.cap.w > width) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_HORZSCALER)?1:0; - if(priv->dri.dr && priv->dri.cap.h < height) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_VERTSCALER)?1:0; - if(priv->dri.dr && priv->dri.cap.h > height) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER)?1:0; + priv.dri.dr = priv.srcFourcc == priv.dri.cap.fourcc && !(priv.dri.flags & VOFLG_FLIP) && + !priv.ps_off[0] && !priv.ps_off[1] && !priv.ps_off[2] && !priv.ps_off[3]; + if(priv.dri.dr && priv.dri.cap.w < width) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER)?1:0; + if(priv.dri.dr && priv.dri.cap.w > width) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_HORZSCALER)?1:0; + if(priv.dri.dr && priv.dri.cap.h < height) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_VERTSCALER)?1:0; + if(priv.dri.dr && priv.dri.cap.h > height) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER)?1:0; } static void __FASTCALL__ dri_reconfig(vo_data_t*vo,uint32_t event ) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - priv->dri.has_dri = 1; - priv->video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv->dri.cap); - dri_config(vo,priv->dri.cap.fourcc); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + priv.dri.has_dri = 1; + priv.video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv.dri.cap); + dri_config(vo,priv.dri.cap.fourcc); /* ugly workaround of swapped BGR-fourccs. Should be removed in the future */ - if(!priv->dri.has_dri) + if(!priv.dri.has_dri) { - priv->dri.has_dri=1; - priv->dri.cap.fourcc = bswap_32(priv->dri.cap.fourcc); - dri_config(vo,priv->dri.cap.fourcc); + priv.dri.has_dri=1; + priv.dri.cap.fourcc = bswap_32(priv.dri.cap.fourcc); + dri_config(vo,priv.dri.cap.fourcc); } - dri_tune(vo,priv->image_width,priv->image_height); + dri_tune(vo,priv.image_width,priv.image_height); /* TODO: smart analizer of scaling possibilities of vo_driver */ if((event & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) { xp_core->in_resize=1; - vf_reinit_vo(priv->dri.cap.w,priv->dri.cap.h,priv->dri.cap.fourcc,1); + vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,1); } - vf_reinit_vo(priv->dri.cap.w,priv->dri.cap.h,priv->dri.cap.fourcc,0); + vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,0); } static int vo_inited=0; @@ -395,49 +409,49 @@ uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MPXP_Rc retval; unsigned dest_fourcc,w,d_w,h,d_h; MSG_DBG3("dri_vo_dbg: vo_config\n"); if(vo_inited) { - MSG_FATAL("!!!priv->video_out internal fatal error: priv->video_out is initialized more than once!!!\n"); + MSG_FATAL("!!!priv.video_out internal fatal error: priv.video_out is initialized more than once!!!\n"); return MPXP_False; } vo_inited++; dest_fourcc = format; - priv->org_width = width; - priv->org_height = height; + priv.org_width = width; + priv.org_height = height; w = width; d_w = d_width; h = height; d_h = d_height; - priv->dri.d_width = d_w; - priv->dri.d_height = d_h; - MSG_V("priv->video_out->config(%u,%u,%u,%u,0x%x,'%s',%s)\n" + priv.dri.d_width = d_w; + priv.dri.d_height = d_h; + MSG_V("priv.video_out->config(%u,%u,%u,%u,0x%x,'%s',%s)\n" ,w,h,d_w,d_h,fullscreen,title,vo_format_name(dest_fourcc)); - retval = priv->video_out->config(vo,w,h,d_w,d_h,fullscreen,title,dest_fourcc); - priv->srcFourcc=format; + retval = priv.video_out->config(vo,w,h,d_w,d_h,fullscreen,title,dest_fourcc); + priv.srcFourcc=format; if(retval == MPXP_Ok) { int dri_retv; - dri_retv = priv->video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv->dri.cap); - priv->image_format = format; - priv->image_width = w; - priv->image_height = h; - ps_tune(vo,priv->image_width,priv->org_height); + dri_retv = priv.video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv.dri.cap); + priv.image_format = format; + priv.image_width = w; + priv.image_height = h; + ps_tune(vo,priv.image_width,priv.org_height); if(dri_retv == MPXP_True) dri_reconfig(vo,0); - MSG_V("dri_vo_caps: driver does %s support DRI\n",priv->dri.has_dri?"":"not"); + MSG_V("dri_vo_caps: driver does %s support DRI\n",priv.dri.has_dri?"":"not"); MSG_V("dri_vo_caps: caps=%08X fourcc=%08X(%s) x,y,w,h(%u %u %u %u)\n" - "dri_vo_caps: width_height(%u %u) strides(%u %u %u %u) priv->dri.bpp=%u\n" - ,priv->dri.cap.caps - ,priv->dri.cap.fourcc - ,vo_format_name(priv->dri.cap.fourcc) - ,priv->dri.cap.x,priv->dri.cap.y,priv->dri.cap.w,priv->dri.cap.h - ,priv->dri.cap.width,priv->dri.cap.height - ,priv->dri.cap.strides[0],priv->dri.cap.strides[1] - ,priv->dri.cap.strides[2],priv->dri.cap.strides[3] - ,priv->dri.bpp); + "dri_vo_caps: width_height(%u %u) strides(%u %u %u %u) priv.dri.bpp=%u\n" + ,priv.dri.cap.caps + ,priv.dri.cap.fourcc + ,vo_format_name(priv.dri.cap.fourcc) + ,priv.dri.cap.x,priv.dri.cap.y,priv.dri.cap.w,priv.dri.cap.h + ,priv.dri.cap.width,priv.dri.cap.height + ,priv.dri.cap.strides[0],priv.dri.cap.strides[1] + ,priv.dri.cap.strides[2],priv.dri.cap.strides[3] + ,priv.dri.bpp); MSG_V("dri_vo_src: w,h(%u %u) d_w,d_h(%u %u)\n" "dri_vo_src: flags=%08X fourcc=%08X(%s)\n" ,width,height @@ -445,7 +459,7 @@ ,fullscreen ,format ,vo_format_name(format)); - priv->dri.flags = fullscreen; + priv.dri.flags = fullscreen; } return retval; } @@ -453,7 +467,7 @@ /* if vo_driver doesn't support dri then it won't work with this logic */ uint32_t __FASTCALL__ vo_query_format(vo_data_t*vo,uint32_t* fourcc, unsigned src_w, unsigned src_h) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); uint32_t dri_forced_fourcc; MPXP_Rc retval; vo_query_fourcc_t qfourcc; @@ -461,7 +475,7 @@ qfourcc.fourcc = *fourcc; qfourcc.w = src_w; qfourcc.h = src_h; - if(priv->video_out->control(vo,VOCTRL_QUERY_FORMAT,&qfourcc)==MPXP_False) + if(priv.video_out->control(vo,VOCTRL_QUERY_FORMAT,&qfourcc)==MPXP_False) qfourcc.flags=VOCAP_NA; MSG_V("dri_vo: request for %s fourcc: %i\n",vo_format_name(*fourcc),qfourcc.flags); dri_forced_fourcc = *fourcc; @@ -470,98 +484,98 @@ MPXP_Rc vo_reset(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_reset\n"); - return priv->video_out->control(vo,VOCTRL_RESET,NULL); + return priv.video_out->control(vo,VOCTRL_RESET,NULL); } MPXP_Rc vo_screenshot(vo_data_t*vo,unsigned idx ) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); char buf[256]; MSG_DBG3("dri_vo_dbg: vo_screenshot\n"); - sprintf(buf,"%llu",priv->frame_counter); - return gr_screenshot(buf,const_cast<const uint8_t**>(priv->dri.surf[idx].planes),priv->dri.cap.strides,priv->dri.cap.fourcc,priv->dri.cap.width,priv->dri.cap.height); + sprintf(buf,"%llu",priv.frame_counter); + return gr_screenshot(buf,const_cast<const uint8_t**>(priv.dri.surf[idx].planes),priv.dri.cap.strides,priv.dri.cap.fourcc,priv.dri.cap.width,priv.dri.cap.height); } MPXP_Rc vo_pause(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_pause\n"); - return priv->video_out->control(vo,VOCTRL_PAUSE,0); + return priv.video_out->control(vo,VOCTRL_PAUSE,0); } MPXP_Rc vo_resume(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_resume\n"); - return priv->video_out->control(vo,VOCTRL_RESUME,0); + return priv.video_out->control(vo,VOCTRL_RESUME,0); } void vo_lock_surfaces(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - pthread_mutex_lock(&priv->surfaces_mutex); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + pthread_mutex_lock(&priv.surfaces_mutex); } void vo_unlock_surfaces(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - pthread_mutex_unlock(&priv->surfaces_mutex); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + pthread_mutex_unlock(&priv.surfaces_mutex); } MPXP_Rc __FASTCALL__ vo_get_surface(vo_data_t*vo,mp_image_t* mpi) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); int width_less_stride; MSG_DBG2("dri_vo_dbg: vo_get_surface type=%X flg=%X\n",mpi->type,mpi->flags); width_less_stride = 0; if(mpi->flags & MP_IMGFLAG_PLANAR) { - width_less_stride = mpi->w <= priv->dri.cap.strides[0] && - (mpi->w>>mpi->chroma_x_shift) <= priv->dri.cap.strides[1] && - (mpi->w>>mpi->chroma_x_shift) <= priv->dri.cap.strides[2]; + width_less_stride = mpi->w <= priv.dri.cap.strides[0] && + (mpi->w>>mpi->chroma_x_shift) <= priv.dri.cap.strides[1] && + (mpi->w>>mpi->chroma_x_shift) <= priv.dri.cap.strides[2]; } - else width_less_stride = mpi->w*mpi->bpp <= priv->dri.cap.strides[0]; - if(priv->dri.has_dri) + else width_less_stride = mpi->w*mpi->bpp <= priv.dri.cap.strides[0]; + if(priv.dri.has_dri) { /* static is singlebuffered decoding */ - if(mpi->type==MP_IMGTYPE_STATIC && priv->dri.num_xp_frames>1) + if(mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->type==MP_IMGTYPE_STATIC && priv->dri.num_xp_frames>1\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1\n"); return MPXP_False; } /*I+P requires 2+ static buffers for R/W */ - if(mpi->type==MP_IMGTYPE_IP && (priv->dri.num_xp_frames < 2 || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) + if(mpi->type==MP_IMGTYPE_IP && (priv.dri.num_xp_frames < 2 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IP && priv->dri.num_xp_frames < 2) || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IP && priv.dri.num_xp_frames < 2) || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /*I+P+B requires 3+ static buffers for R/W */ - if(mpi->type==MP_IMGTYPE_IPB && (priv->dri.num_xp_frames != 3 || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) + if(mpi->type==MP_IMGTYPE_IPB && (priv.dri.num_xp_frames != 3 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IPB && priv->dri.num_xp_frames != 3) || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IPB && priv.dri.num_xp_frames != 3) || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /* video surface is bad thing for reading */ - if(((mpi->flags&MP_IMGFLAG_READABLE)||(mpi->type==MP_IMGTYPE_TEMP)) && (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED) + if(((mpi->flags&MP_IMGFLAG_READABLE)||(mpi->type==MP_IMGTYPE_TEMP)) && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->flags&MP_IMGFLAG_READABLE && (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->flags&MP_IMGFLAG_READABLE && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /* it seems that surfaces are equal */ - if((((mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && width_less_stride) || priv->dri.planes_eq) && priv->dri.dr) + if((((mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && width_less_stride) || priv.dri.planes_eq) && priv.dri.dr) { vo_lock_surfaces(vo); - mpi->planes[0]=priv->dri.surf[mpi->xp_idx].planes[0]+priv->dri.off[0]; - mpi->planes[1]=priv->dri.surf[mpi->xp_idx].planes[1]+priv->dri.off[1]; - mpi->planes[2]=priv->dri.surf[mpi->xp_idx].planes[2]+priv->dri.off[2]; - mpi->stride[0]=priv->dri.cap.strides[0]; - mpi->stride[1]=priv->dri.cap.strides[1]; - mpi->stride[2]=priv->dri.cap.strides[2]; + mpi->planes[0]=priv.dri.surf[mpi->xp_idx].planes[0]+priv.dri.off[0]; + mpi->planes[1]=priv.dri.surf[mpi->xp_idx].planes[1]+priv.dri.off[1]; + mpi->planes[2]=priv.dri.surf[mpi->xp_idx].planes[2]+priv.dri.off[2]; + mpi->stride[0]=priv.dri.cap.strides[0]; + mpi->stride[1]=priv.dri.cap.strides[1]; + mpi->stride[2]=priv.dri.cap.strides[2]; mpi->flags|=MP_IMGFLAG_DIRECT; vo_unlock_surfaces(vo); MSG_DBG2("dri_vo_dbg: vo_get_surface OK\n"); return MPXP_True; } - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE && width_less_stride) || priv->dri.planes_eq) && priv->dri.dr\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE && width_less_stride) || priv.dri.planes_eq) && priv.dri.dr\n"); return MPXP_False; } else return MPXP_False; @@ -569,12 +583,12 @@ static int __FASTCALL__ adjust_size(any_t*vo,unsigned cw,unsigned ch,unsigned *nw,unsigned *nh) { - vo_priv_t* priv=(vo_priv_t*)((vo_data_t*)vo)->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(((vo_data_t*)vo)->vo_priv); MSG_DBG3("dri_vo_dbg: adjust_size was called %u %u %u %u\n",cw,ch,*nw,*nh); - if((priv->dri.flags & VOFLG_ZOOM) && (cw != *nw || ch != *nh) && !(priv->dri.flags & VOFLG_FS)) + if((priv.dri.flags & VOFLG_ZOOM) && (cw != *nw || ch != *nh) && !(priv.dri.flags & VOFLG_FS)) { float aspect,newv; - aspect = (float)priv->dri.d_width / (float)priv->dri.d_height; + aspect = (float)priv.dri.d_width / (float)priv.dri.d_height; if(abs(cw-*nw) > abs(ch-*nh)) { newv = ((float)(*nw))/aspect; @@ -595,66 +609,66 @@ int vo_check_events(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); uint32_t retval; int need_repaint; vo_resize_t vrest; MSG_DBG3("dri_vo_dbg: vo_check_events\n"); vrest.event_type = 0; vrest.adjust_size = adjust_size; - retval = priv->video_out->control(vo,VOCTRL_CHECK_EVENTS,&vrest); + retval = priv.video_out->control(vo,VOCTRL_CHECK_EVENTS,&vrest); /* it's ok since accelerated drivers doesn't touch surfaces but there is only one driver (vo_x11) which changes surfaces on 'fullscreen' key */ need_repaint=0; - if(priv->dri.has_dri && retval == MPXP_True && (vrest.event_type & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) + if(priv.dri.has_dri && retval == MPXP_True && (vrest.event_type & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) { need_repaint=1; dri_reconfig(vo,vrest.event_type); } - return (need_repaint && !priv->dri.accel) || (vrest.event_type&VO_EVENT_FORCE_UPDATE); + return (need_repaint && !priv.dri.accel) || (vrest.event_type&VO_EVENT_FORCE_UPDATE); } MPXP_Rc vo_fullscreen(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); uint32_t etype; MPXP_Rc retval; MSG_DBG3("dri_vo_dbg: vo_fullscreen\n"); etype = 0; - retval = priv->video_out->control(vo,VOCTRL_FULLSCREEN,&etype); - if(priv->dri.has_dri && retval == MPXP_True && (etype & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) + retval = priv.video_out->control(vo,VOCTRL_FULLSCREEN,&etype); + if(priv.dri.has_dri && retval == MPXP_True && (etype & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) dri_reconfig(vo,etype); - if(retval == MPXP_True) priv->dri.flags ^= VOFLG_FS; + if(retval == MPXP_True) priv.dri.flags ^= VOFLG_FS; return retval; } unsigned __FASTCALL__ vo_get_num_frames(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - return priv->dri.num_xp_frames; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + return priv.dri.num_xp_frames; } MPXP_Rc __FASTCALL__ vo_draw_slice(vo_data_t*vo,const mp_image_t *mpi) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i,_w[4],_h[4],x,y; MSG_DBG3("dri_vo_dbg: vo_draw_slice xywh=%i %i %i %i\n",mpi->x,mpi->y,mpi->w,mpi->h); - if(priv->dri.has_dri) { + if(priv.dri.has_dri) { uint8_t *dst[4]; const uint8_t *ps_src[4]; int dstStride[4]; int finalize=vo_is_final(vo); unsigned idx = mpi->xp_idx; for(i=0;i<4;i++) { - dst[i]=priv->dri.surf[idx].planes[i]+priv->dri.off[i]; - dstStride[i]=priv->dri.cap.strides[i]; - dst[i]+=((mpi->y*dstStride[i])*priv->vod.y_mul[i])/priv->vod.y_div[i]; - dst[i]+=(mpi->x*priv->vod.x_mul[i])/priv->vod.x_div[i]; - _w[i]=(mpi->w*priv->vod.x_mul[i])/priv->vod.x_div[i]; - _h[i]=(mpi->h*priv->vod.y_mul[i])/priv->vod.y_div[i]; + dst[i]=priv.dri.surf[idx].planes[i]+priv.dri.off[i]; + dstStride[i]=priv.dri.cap.strides[i]; + dst[i]+=((mpi->y*dstStride[i])*priv.vod.y_mul[i])/priv.vod.y_div[i]; + dst[i]+=(mpi->x*priv.vod.x_mul[i])/priv.vod.x_div[i]; + _w[i]=(mpi->w*priv.vod.x_mul[i])/priv.vod.x_div[i]; + _h[i]=(mpi->h*priv.vod.y_mul[i])/priv.vod.y_div[i]; y = i?(mpi->y>>mpi->chroma_y_shift):mpi->y; x = i?(mpi->x>>mpi->chroma_x_shift):mpi->x; - ps_src[i] = mpi->planes[i]+(y*mpi->stride[i])+x+priv->ps_off[i]; + ps_src[i] = mpi->planes[i]+(y*mpi->stride[i])+x+priv.ps_off[i]; } for(i=0;i<4;i++) { if(mpi->stride[i]) { @@ -671,38 +685,38 @@ void vo_select_frame(vo_data_t*vo,unsigned play_idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG2("dri_vo_dbg: vo_select_frame(play_idx=%u)\n",play_idx); - priv->video_out->select_frame(vo,play_idx); + priv.video_out->select_frame(vo,play_idx); } void vo_flush_page(vo_data_t*vo,unsigned decoder_idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_flush_pages [idx=%u]\n",decoder_idx); - priv->frame_counter++; - if((priv->dri.cap.caps & DRI_CAP_VIDEO_MMAPED)!=DRI_CAP_VIDEO_MMAPED) - priv->video_out->control(vo,VOCTRL_FLUSH_PAGES,&decoder_idx); + priv.frame_counter++; + if((priv.dri.cap.caps & DRI_CAP_VIDEO_MMAPED)!=DRI_CAP_VIDEO_MMAPED) + priv.video_out->control(vo,VOCTRL_FLUSH_PAGES,&decoder_idx); } /* DRAW OSD */ static void __FASTCALL__ clear_rect(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; for(i=0;i<h;i++) { - if(_y0+i<priv->dri.cap.y||_y0+i>=priv->dri.cap.y+priv->dri.cap.h) memset(dest,filler,stride); + if(_y0+i<priv.dri.cap.y||_y0+i>=priv.dri.cap.y+priv.dri.cap.h) memset(dest,filler,stride); dest += dstride; } } static void __FASTCALL__ clear_rect2(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - unsigned _y1 = priv->dri.cap.y/2; - unsigned _y2 = (priv->dri.cap.y+priv->dri.cap.h)/2; + unsigned _y1 = priv.dri.cap.y/2; + unsigned _y2 = (priv.dri.cap.y+priv.dri.cap.h)/2; for(i=0;i<h;i++) { if(_y0+i<_y1||_y0+i>=_y2) memset(dest,filler,stride); @@ -712,10 +726,10 @@ static void __FASTCALL__ clear_rect4(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - unsigned _y1 = priv->dri.cap.y/4; - unsigned _y2 = (priv->dri.cap.y+priv->dri.cap.h)/4; + unsigned _y1 = priv.dri.cap.y/4; + unsigned _y2 = (priv.dri.cap.y+priv.dri.cap.h)/4; for(i=0;i<h;i++) { if(_y0+i<_y1||_y0+i>=_y2) memset(dest,filler,stride); @@ -725,22 +739,22 @@ static void __FASTCALL__ clear_rect_rgb(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; for(i=0;i<h;i++) { - if(_y0+i<priv->dri.cap.y||_y0+i>=priv->dri.cap.y+priv->dri.cap.h) memset(dest,0,stride); + if(_y0+i<priv.dri.cap.y||_y0+i>=priv.dri.cap.y+priv.dri.cap.h) memset(dest,0,stride); dest += dstride; } } static void __FASTCALL__ clear_rect_yuy2(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; for(i=0;i<h;i++) { - if(_y0+i<priv->dri.cap.y||_y0+i>=priv->dri.cap.y+priv->dri.cap.h) + if(_y0+i<priv.dri.cap.y||_y0+i>=priv.dri.cap.y+priv.dri.cap.h) { uint32_t *dst32; unsigned j,size32; @@ -758,9 +772,9 @@ static void __FASTCALL__ dri_remove_osd(any_t*_vo,unsigned idx,int x0,int _y0, int w,int h) { vo_data_t* vo=reinterpret_cast<vo_data_t*>(_vo); - vo_priv_t* priv=reinterpret_cast<vo_priv_t*>(vo->vo_priv); - if(x0+w<=priv->dri.cap.width&&_y0+h<=priv->dri.cap.height) - switch(priv->dri.cap.fourcc) + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + if(x0+w<=priv.dri.cap.width&&_y0+h<=priv.dri.cap.height) + switch(priv.dri.cap.fourcc) { case IMGFMT_RGB15: case IMGFMT_BGR15: @@ -770,40 +784,40 @@ case IMGFMT_BGR24: case IMGFMT_RGB32: case IMGFMT_BGR32: - clear_rect_rgb(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0*((priv->dri.bpp+7)/8), - w*(priv->dri.bpp+7)/8,priv->dri.cap.strides[0]); + clear_rect_rgb(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0*((priv.dri.bpp+7)/8), + w*(priv.dri.bpp+7)/8,priv.dri.cap.strides[0]); break; case IMGFMT_YVYU: case IMGFMT_YUY2: - clear_rect_yuy2(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0*2, - w*2,priv->dri.cap.strides[0]); + clear_rect_yuy2(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0*2, + w*2,priv.dri.cap.strides[0]); break; case IMGFMT_UYVY: - clear_rect_yuy2(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0*2+1, - w*2,priv->dri.cap.strides[0]); + clear_rect_yuy2(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0*2+1, + w*2,priv.dri.cap.strides[0]); break; case IMGFMT_Y800: - clear_rect(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0, - w,priv->dri.cap.strides[0],0x10); + clear_rect(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0, + w,priv.dri.cap.strides[0],0x10); break; case IMGFMT_YV12: case IMGFMT_I420: case IMGFMT_IYUV: - clear_rect(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0, - w,priv->dri.cap.strides[0],0x10); - clear_rect2(vo,_y0/2,h/2,priv->dri.surf[idx].planes[1]+_y0/2*priv->dri.cap.strides[1]+x0/2, - w/2,priv->dri.cap.strides[1],0x80); - clear_rect2(vo,_y0/2,h/2,priv->dri.surf[idx].planes[2]+_y0/2*priv->dri.cap.strides[2]+x0/2, - w/2,priv->dri.cap.strides[2],0x80); + clear_rect(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0, + w,priv.dri.cap.strides[0],0x10); + clear_rect2(vo,_y0/2,h/2,priv.dri.surf[idx].planes[1]+_y0/2*priv.dri.cap.strides[1]+x0/2, + w/2,priv.dri.cap.strides[1],0x80); + clear_rect2(vo,_y0/2,h/2,priv.dri.surf[idx].planes[2]+_y0/2*priv.dri.cap.strides[2]+x0/2, + w/2,priv.dri.cap.strides[2],0x80); break; case IMGFMT_YVU9: case IMGFMT_IF09: - clear_rect(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0, - w,priv->dri.cap.strides[0],0x10); - clear_rect4(vo,_y0/4,h/4,priv->dri.surf[idx].planes[1]+_y0/4*priv->dri.cap.strides[1]+x0/4, - w/4,priv->dri.cap.strides[1],0x80); - clear_rect4(vo,_y0/4,h/4,priv->dri.surf[idx].planes[2]+_y0/4*priv->dri.cap.strides[2]+x0/4, - w/4,priv->dri.cap.strides[2],0x80); + clear_rect(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0, + w,priv.dri.cap.strides[0],0x10); + clear_rect4(vo,_y0/4,h/4,priv.dri.surf[idx].planes[1]+_y0/4*priv.dri.cap.strides[1]+x0/4, + w/4,priv.dri.cap.strides[1],0x80); + clear_rect4(vo,_y0/4,h/4,priv.dri.surf[idx].planes[2]+_y0/4*priv.dri.cap.strides[2]+x0/4, + w/4,priv.dri.cap.strides[2],0x80); break; } } @@ -842,67 +856,66 @@ static void __FASTCALL__ dri_draw_osd(any_t*vo,unsigned idx,int x0,int _y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride) { - vo_priv_t* priv=reinterpret_cast<vo_priv_t*>(reinterpret_cast<vo_data_t*>(vo)->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(reinterpret_cast<vo_data_t*>(vo)->vo_priv); int finalize=vo_is_final(reinterpret_cast<vo_data_t*>(vo)); - if(x0+w<=priv->dri.cap.width&&_y0+h<=priv->dri.cap.height) + if(x0+w<=priv.dri.cap.width&&_y0+h<=priv.dri.cap.height) { - if(!priv->draw_alpha) priv->draw_alpha=get_draw_alpha(priv->dri.cap.fourcc); - if(priv->draw_alpha) - (*priv->draw_alpha)(w,h,src,srca,stride, - priv->dri.surf[idx].planes[0]+priv->dri.cap.strides[0]*_y0+x0*((priv->dri.bpp+7)/8), - priv->dri.cap.strides[0],finalize); + if(!priv.draw_alpha) priv.draw_alpha=get_draw_alpha(priv.dri.cap.fourcc); + if(priv.draw_alpha) + (*priv.draw_alpha)(w,h,src,srca,stride, + priv.dri.surf[idx].planes[0]+priv.dri.cap.strides[0]*_y0+x0*((priv.dri.bpp+7)/8), + priv.dri.cap.strides[0],finalize); } } void vo_draw_osd(vo_data_t*vo,unsigned idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_draw_osd\n"); - if(priv->dri.has_dri && !(priv->dri.cap.caps & DRI_CAP_HWOSD)) + if(priv.dri.has_dri && !(priv.dri.cap.caps & DRI_CAP_HWOSD)) { - if( priv->dri.cap.x || priv->dri.cap.y || - priv->dri.cap.w != priv->dri.cap.width || priv->dri.cap.h != priv->dri.cap.height) - vo_remove_text(vo,idx,priv->dri.cap.width,priv->dri.cap.height,dri_remove_osd); - vo_draw_text(vo,idx,priv->dri.cap.width,priv->dri.cap.height,dri_draw_osd); + if( priv.dri.cap.x || priv.dri.cap.y || + priv.dri.cap.w != priv.dri.cap.width || priv.dri.cap.h != priv.dri.cap.height) + vo_remove_text(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_remove_osd); + vo_draw_text(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_draw_osd); } } void vo_draw_spudec_direct(vo_data_t*vo,unsigned idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_draw_osd\n"); - if(priv->dri.has_dri && !(priv->dri.cap.caps & DRI_CAP_HWOSD)) + if(priv.dri.has_dri && !(priv.dri.cap.caps & DRI_CAP_HWOSD)) { -// if( priv->dri.cap.x || priv->dri.cap.y || -// priv->dri.cap.w != priv->dri.cap.width || priv->dri.cap.h != priv->dri.cap.height) -// vo_remove_text(idx,priv->dri.cap.width,priv->dri.cap.height,dri_remove_osd); - vo_draw_spudec(vo,idx,priv->dri.cap.width,priv->dri.cap.height,dri_draw_osd); +// if( priv.dri.cap.x || priv.dri.cap.y || +// priv.dri.cap.w != priv.dri.cap.width || priv.dri.cap.h != priv.dri.cap.height) +// vo_remove_text(idx,priv.dri.cap.width,priv.dri.cap.height,dri_remove_osd); + vo_draw_spudec(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_draw_osd); } } void vo_uninit(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t* priv=static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_uninit\n"); vo_inited--; priv->video_out->uninit(vo); - pthread_mutex_destroy(&priv->surfaces_mutex); delete priv; } MPXP_Rc __FASTCALL__ vo_control(vo_data_t*vo,uint32_t request, any_t*data) { MPXP_Rc rval; - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - rval=priv->video_out->control(vo,request,data); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + rval=priv.video_out->control(vo,request,data); MSG_DBG3("dri_vo_dbg: %u=vo_control( %u, %p )\n",rval,request,data); return rval; } int __FASTCALL__ vo_is_final(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - int mmaped=priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED; - int busmaster=priv->dri.cap.caps&DRI_CAP_BUSMASTERING; - return mmaped||busmaster||(priv->dri.num_xp_frames>1); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + int mmaped=priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED; + int busmaster=priv.dri.cap.caps&DRI_CAP_BUSMASTERING; + return mmaped||busmaster||(priv.dri.num_xp_frames>1); } Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-11-24 07:35:40 UTC (rev 445) +++ mplayerxp/libvo/video_out.h 2012-11-24 09:41:49 UTC (rev 446) @@ -10,6 +10,9 @@ #define __VIDEO_OUT_H 1 #include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; + #include <inttypes.h> #include <stdarg.h> @@ -127,7 +130,10 @@ int left, right, top, bottom, width, height; }; -typedef struct vo_conf_s { +struct VO_Config { + VO_Config(); + ~VO_Config() {} + char * subdevice; // currently unused char* mDisplayName; @@ -152,9 +158,15 @@ int softzoom; int flip; unsigned dbpp; -}vo_conf_t; -extern vo_conf_t vo_conf; +}; +extern VO_Config vo_conf; +class video_private : public Opaque { + public: + video_private() {} + virtual ~video_private() {} +}; + typedef struct vo_data_s { Display* mDisplay; char antiviral_hole[RND_CHAR4]; @@ -169,10 +181,10 @@ // requested resolution/bpp: (-x -y -bpp options) vo_rect_t dest; - any_t* vo_priv;/* private data of vo structure */ - any_t* priv; /* private data of video driver */ - any_t* priv2; /* private data of X11 commons */ - any_t* priv3; /* private data of vidix commons */ + video_private* vo_priv;/* private data of vo structure */ + video_private* priv; /* private data of video driver */ + video_private* priv2; /* private data of X11 commons */ + video_private* priv3; /* private data of vidix commons */ /* subtitle support */ char* osd_text; Modified: mplayerxp/libvo/vo_dga.cpp =================================================================== --- mplayerxp/libvo/vo_dga.cpp 2012-11-24 07:35:40 UTC (rev 445) +++ mplayerxp/libvo/vo_dga.cpp 2012-11-24 09:41:49 UTC (rev 446) @@ -55,7 +55,10 @@ "" }; -typedef struct priv_s { +struct dga_priv_t : public video_private { + dga_priv_t(); + virtual ~dga_priv_t() {} + int is_running; #ifdef HAVE_XF86VM XF86VidModeModeInfo **vidmodes; @@ -80,21 +83,17 @@ /* XP-specific data */ unsigned num_buffers; // 1 - default int x_off, y_off, dstFourcc; -}priv_t; +}; + +dga_priv_t::dga_priv_t() { + num_buffers=1; +} //----------------------------------------------------------------- //------------------------------------------------------------------ - - -//#define BITSPP (vo_dga_modes[vo_dga_active_mode].vdm_bitspp) -//#define BYTESPP (vo_dga_modes[vo_dga_active_mode].vdm_bytespp) - #define VO_DGA_INVALID_RES 100000 -#define HW_MODE (vo_dga_modes[priv->hw_mode]) -#define SRC_MODE (vo_dga_modes[priv->src_mode]) - struct vd_modes { unsigned vdm_mplayer_depth; int vdm_supported; @@ -126,9 +125,11 @@ { 24, 0, 24, 24, 3, 0xff0000, 0x00ff00, 0x0000ff, 4, VDM_CONV_24TO32}, { 32, 0, 24, 32, 4, 0x00ff0000, 0x0000ff00, 0x000000ff, 4, VDM_CONV_NATIVE} }; - static unsigned vo_dga_mode_num = sizeof(vo_dga_modes)/sizeof(struct vd_modes); +inline struct vd_modes HW_MODE(dga_priv_t& priv) { return vo_dga_modes[priv.hw_mode]; } +inline struct vd_modes SRC_MODE(dga_priv_t& priv) { return vo_dga_modes[priv.src_mode]; } + // enable a HW mode (by description) static int __FASTCALL__ vd_EnableMode( unsigned depth, unsigned bitspp, int rmask, int gmask, int bmask){ @@ -216,8 +217,8 @@ #if 0 static void __FASTCALL__ fillblock(char *strt, int yoff, int lines, int val){ char *i; - for(i = strt + yoff * priv->width *HW_MODE.vdm_bytespp; - i< strt + (lines+yoff) * priv->width *HW_MODE.vdm_bytespp; ){ + for(i = strt + yoff * priv.width *HW_MODE.vdm_bytespp; + i< strt + (lines+yoff) * priv.width *HW_MODE.vdm_bytespp; ){ *i++ = val; } } @@ -235,14 +236,14 @@ static void __FASTCALL__ select_frame(vo_data_t*vo, unsigned idx ) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); #ifdef HAVE_DGA2 XDGASetViewport (vo->mDisplay, XDefaultScreen(vo->mDisplay), - 0, priv->dbf_y_offset[idx], + 0, priv.dbf_y_offset[idx], XDGAFlipRetrace); #else XF86DGASetViewPort (vo->mDisplay, XDefaultScreen(vo->mDisplay), - 0, priv->dbf_y_offset[idx]); + 0, priv.dbf_y_offset[idx]); #endif } @@ -258,7 +259,7 @@ static MPXP_Rc __FASTCALL__ query_format(vo_data_t*vo, vo_query_fourcc_t *fourcc ) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); #ifdef HAVE_DGA2 XDGAMode *modelines; int modecount; @@ -273,15 +274,15 @@ MSG_ERR( "vo_dga: Can't open display!\n"); return MPXP_False; } - priv->udf_screenw = vo_conf.screenwidth; - priv->udf_screenh = vo_conf.screenheight; + priv.udf_screenw = vo_conf.screenwidth; + priv.udf_screenh = vo_conf.screenheight; if(vo_x11_init(vo)!=MPXP_Ok){ MSG_ERR( "vo_dga: vo_x11_init() failed!\n"); return MPXP_False; } - priv->XServer_mode = vd_ValidateMode(vo->depthonscreen); + priv.XServer_mode = vd_ValidateMode(vo->depthonscreen); - if(priv->XServer_mode ==0){ + if(priv.XServer_mode ==0){ #ifndef HAVE_DGA2 MSG_ERR( "vo_dga: Your X-Server is not running in a "); MSG_ERR( "resolution supported by DGA driver!\n"); @@ -346,13 +347,13 @@ static void uninit(vo_data_t*vo) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); #ifdef HAVE_DGA2 XDGADevice *dgadevice; #endif - if(priv->is_running) { - priv->is_running = 0; + if(priv.is_running) { + priv.is_running = 0; MSG_DBG2( "vo_dga: in uninit\n"); XUngrabPointer (vo->mDisplay, CurrentTime); XUngrabKeyboard (vo->mDisplay, CurrentTime); @@ -366,16 +367,16 @@ XF86DGADirectVideo (vo->mDisplay, XDefaultScreen(vo->mDisplay), 0); // first disable DirectVideo and then switch mode back! #ifdef HAVE_XF86VM - if (priv->vidmodes != NULL ){ + if (priv.vidmodes != NULL ){ int screen; screen=XDefaultScreen( vo->mDisplay ); MSG_DBG2( "vo_dga: VidModeExt: Switching back..\n"); // seems some graphics adaptors need this more than once ... - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XFree(priv->vidmodes); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XFree(priv.vidmodes); } #endif #endif @@ -416,7 +417,7 @@ #ifdef HAVE_DGA2 static int __FASTCALL__ dga2_find_best_mode(vo_data_t*vo,unsigned wanted_width,unsigned wanted_height) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); XDGAMode *modelines=NULL; unsigned i,j=0; int mVBI=100000, mMaxY=0,mX=VO_DGA_INVALID_RES, mY=VO_DGA_INVALID_RES,modecount; @@ -448,7 +449,7 @@ modelines[i].redMask, modelines[i].greenMask, modelines[i].blueMask, - priv->hw_mode)) { + priv.hw_mode)) { MSG_DBG2( "maxy: %4d, depth: %2d, %4dx%4d, ", modelines[i].maxViewportY, modelines[i].depth, modelines[i].imageWidth, modelines[i].imageHeight ); @@ -469,10 +470,10 @@ ,modelines[j].verticalRefresh ,modelines[j].bytesPerScanline/((modelines[j].bitsPerPixel+7)/8)); - priv->vp_width = mX; - priv->vp_height = mY; + priv.vp_width = mX; + priv.vp_height = mY; - priv->width = modelines[j].bytesPerScanline / HW_MODE.vdm_bytespp ; + priv.width = modelines[j].bytesPerScanline / HW_MODE(priv).vdm_bytespp ; dga_modenum = modelines[j].num; XFree(modelines); @@ -481,7 +482,7 @@ static int __FASTCALL__ dga2_select_mode(vo_data_t*vo, int dga_modenum ) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); XDGADevice *dgadevice; int bank, ram_size; if (!XDGAOpenFramebuffer(vo->mDisplay, XDefaultScreen(vo->mDisplay))){ @@ -492,11 +493,11 @@ if(dga_modenum != -1) { dgadevice=XDGASetMode(vo->mDisplay, XDefaultScreen(vo->mDisplay), dga_modenum); XDGASync(vo->mDisplay, XDefaultScreen(vo->mDisplay)); - priv->base = dgadevice->data; + priv.base = dgadevice->data; XFree(dgadevice); } else XF86DGAGetVideo (vo->mDisplay, XDefaultScreen(vo->mDisplay), - (char **)&priv->base, reinterpret_cast<int*>(&priv->width), + (char **)&priv.base, reinterpret_cast<int*>(&priv.width), &bank, &ram_size); XDGASetViewport (vo->mDisplay, XDefaultScreen(vo->mDisplay), 0, 0, XDGAFlipRetrace); return 0; @@ -506,7 +507,7 @@ #ifdef HAVE_XF86VM static int __FASTCALL__ xf86vm_find_best_mode(vo_data_t*vo,unsigned wanted_width,unsigned wanted_height) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); unsigned vm_event, vm_error; unsigned vm_ver, vm_rev; int i, j=0, have_vm=0; @@ -528,30 +529,30 @@ if (have_vm) { int screen; screen=XDefaultScreen(vo->mDisplay); - XF86VidModeGetAllModeLines(vo->mDisplay,screen,&modecount,&priv->vidmodes); + XF86VidModeGetAllModeLines(vo->mDisplay,screen,&modecount,&priv.vidmodes); - if(priv->vidmodes != NULL ){ + if(priv.vidmodes != NULL ){ for (i=0; i<modecount; i++){ if ( check_res( i, wanted_width, wanted_height, - vo_dga_modes[priv->hw_mode].vdm_depth, - priv->vidmodes[i]->hdisplay, - priv->vidmodes[i]->vdisplay, - GET_VREFRESH(priv->vidmodes[i]->dotclock, - priv->vidmodes[i]->htotal, - priv->vidmodes[i]->vtotal), + vo_dga_modes[priv.hw_mode].vdm_depth, + priv.vidmodes[i]->hdisplay, + priv.vidmodes[i]->vdisplay, + GET_VREFRESH(priv.vidmodes[i]->dotclock, + priv.vidmodes[i]->htotal, + priv.vidmodes[i]->vtotal), 0, &mX, &mY, &mVBI, &mMaxY )) j = i; } MSG_V("vo_dga: Selected video mode %4d x %4d @ %3d Hz @ depth %2d, bitspp %2d\n", mX, mY, mVBI, - vo_dga_modes[priv->hw_mode].vdm_depth, - vo_dga_modes[priv->hw_mode].vdm_bitspp); + vo_dga_modes[priv.hw_mode].vdm_depth, + vo_dga_modes[priv.hw_mode].vdm_bitspp); } else { MSG_V( "vo_dga: XF86VidMode returned no screens - using current resolution.\n"); } dga_modenum = j; - priv->vp_width = mX; - priv->vp_height = mY; + priv.vp_width = mX; + priv.vp_height = mY; } return dga_modenum; } @@ -562,8 +563,8 @@ XF86VidModeLockModeSwitch(vo->mDisplay,XDefaultScreen(vo->mDisplay),0); /* Two calls are needed to switch modes on my ATI Rage 128. Why? for riva128 one call is enough! */ - XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv->vidmodes[dga_modenum]); - XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv->vidmodes[dga_modenum]); + XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv.vidmodes[dga_modenum]); + XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv.vidmodes[dga_modenum]); } } #endif @@ -573,7 +574,7 @@ uint32_t d_width,uint32_t d_height, uint32_t flags,char *title,uint32_t format) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); unsigned wanted_width, wanted_height; int dga_modenum; int bank,ram_size; @@ -581,11 +582,11 @@ int mX,mY; UNUSED(title); - if( priv->is_running ) return MPXP_False; + if( priv.is_running ) return MPXP_False; - priv->src_format = format; - priv->src_width = priv->dest_width = width; - priv->src_height = priv->dest_height = height; + priv.src_format = format; + priv.src_width = priv.dest_width = width; + priv.src_height = priv.dest_height = height; wanted_width = d_width; wanted_height = d_height; @@ -593,26 +594,27 @@ if(!wanted_height) wanted_height = height; if(!wanted_width) wanted_width = width; - if(priv->udf_screenw) wanted_width = priv->udf_screenw; - if(priv->udf_screenh) wanted_height = priv->udf_screenh; + if(priv.udf_screenw) wanted_width = priv.udf_screenw; + if(priv.udf_screenh) wanted_height = priv.udf_screenh; if(vo_x11_init(vo)!=MPXP_Ok) { MSG_ERR( "vo_dga: vo_x11_init() failed!\n"); return MPXP_False; } - if(!vo_conf.dbpp ) priv->src_mode = priv->XServer_mode; - else priv->src_mode = vd_ModeValid(vo_conf.dbpp); - priv->hw_mode = SRC_MODE.vdm_hw_mode; + if(!vo_conf.dbpp ) priv.src_mode = priv.XServer_mode; + else priv.src_mode = vd_ModeValid(vo_conf.dbpp); - if(priv->src_mode != priv->hw_mode ){ + priv.hw_mode = SRC_MODE(priv).vdm_hw_mode; + + if(priv.src_mode != priv.hw_mode ){ MSG_ERR("vo_dga: swScaler supports native modes only. Using %d instead of selected %d.\n", - HW_MODE.vdm_mplayer_depth, - SRC_MODE.vdm_mplayer_depth ); - priv->src_mode = priv->hw_mode; + HW_MODE(priv).vdm_mplayer_depth, + SRC_MODE(priv).vdm_mplayer_depth ); + priv.src_mode = priv.hw_mode; } - if(!priv->src_mode) { + if(!priv.src_mode) { MSG_ERR( "vo_dga: unsupported video format!\n"); return MPXP_False; } @@ -637,8 +639,8 @@ #endif MSG_V("vo_dga: Video parameters by codec: %3d x %3d, depth %2d, bitspp %2d.\n", width, height, - SRC_MODE.vdm_depth, - SRC_MODE.vdm_bitspp); + SRC_MODE(priv).vdm_depth, + SRC_MODE(priv).vdm_bitspp); /* now lets start the DGA thing */ #ifdef HAVE_DGA2 if(dga2_select_mode(vo,dga_modenum)) return MPXP_False; @@ -655,24 +657,24 @@ #endif /* for both DGA1 and DGA2 we need to know ram_size */ XF86DGAGetVideo (vo->mDisplay, XDefaultScreen(vo->mDisplay), - (char **)&priv->base, reinterpret_cast<int*>(&priv->vp_width), + (char **)&priv.base, reinterpret_cast<int*>(&priv.vp_width), &bank, &ram_size); XF86DGAGetViewPortSize(vo->mDisplay,DefaultScreen(vo->mDisplay),&mX,&mY); - priv->vp_width = mX; - priv->vp_height = mY; + priv.vp_width = mX; + priv.vp_height = mY; MSG_DBG2( "vo_dga: XServer res: %dx%d\n", - priv->vp_width, priv->vp_height); + priv.vp_width, priv.vp_height); - if(priv->dest_width > priv->vp_width || priv->dest_height > priv->vp_height) { + if(priv.dest_width > priv.vp_width || priv.dest_height > priv.vp_height) { MSG_ERR( "vo_dga: Sorry, video larger than viewport is not yet supported!\n"); // ugly, do something nicer in the future ... #ifndef HAVE_DGA2 #ifdef HAVE_XF86VM - if(priv->vidmodes){ - XFree(priv->vidmodes); - priv->vidmodes = NULL; + if(priv.vidmodes){ + XFree(priv.vidmodes); + priv.vidmodes = NULL; } #endif #endif @@ -680,40 +682,40 @@ } if((flags&0x04)||(flags&0x01)) { /* -zoom or -fs */ - priv->dest_width = d_width; - priv->dest_height = d_height; + priv.dest_width = d_width; + priv.dest_height = d_height; - aspect_save_orig(priv->src_width,priv->src_height); + aspect_save_orig(priv.src_width,priv.src_height); aspect_save_screenres(mX,mY); - aspect_save_prescale(priv->dest_width,priv->dest_height); + aspect_save_prescale(priv.dest_width,priv.dest_height); if((flags&0x05)==0x05) /* -fs -zoom */ - aspect(&priv->dest_width,&priv->dest_height,A_ZOOM); + aspect(&priv.dest_width,&priv.dest_height,A_ZOOM); else if(flags&0x04)/* -zoom */ - aspect(&priv->dest_width,&priv->dest_height,A_NOZOOM); + aspect(&priv.dest_width,&priv.dest_height,A_NOZOOM); else { /* -fs */ - priv->dest_width = mX; - priv->dest_height = mY; + priv.dest_width = mX; + priv.dest_height = mY; } MSG_V("vo_dga: Aspect corrected size for SwScaler: %4d x %4d.\n", - priv->dest_width, priv->dest_height); + priv.dest_width, priv.dest_height); } - switch(HW_MODE.vdm_bitspp) { - case 32: priv->dstFourcc = IMGFMT_BGR32; break; - case 24: priv->dstFourcc = IMGFMT_BGR24; break; - case 15: priv->dstFourcc = IMGFMT_BGR15; break; - default: priv->dstFourcc = IMGFMT_BGR16; break; + switch(HW_MODE(priv).vdm_bitspp) { + case 32: priv.dstFourcc = IMGFMT_BGR32; break; + case 24: priv.dstFourcc = IMGFMT_BGR24; break; + case 15: priv.dstFourcc = IMGFMT_BGR15; break; + default: priv.dstFourcc = IMGFMT_BGR16; break; } MSG_DBG2( "vo_dga: bytes/line: %d, screen res: %dx%d, depth: %d, base: %08x, bpp: %d\n", - priv->width, priv->vp_width, - priv->vp_height, HW_MODE.vdm_bytespp, priv->base, - HW_MODE.vdm_bitspp); + priv.width, priv.vp_width, + priv.vp_height, HW_MODE(priv).vdm_bytespp, priv.base, + HW_MODE(priv).vdm_bitspp); - priv->x_off = (priv->vp_width - priv->dest_width)>>1; - priv->y_offset = priv->y_off = (priv->vp_height - priv->dest_height)>>1; - priv->vp_offset = (priv->y_off * priv->width + priv->x_off ) * HW_MODE.vdm_bytespp; + priv.x_off = (priv.vp_width - priv.dest_width)>>1; + priv.y_offset = priv.y_off = (priv.vp_height - priv.dest_height)>>1; + priv.vp_offset = (priv.y_off * priv.width + priv.x_off ) * HW_MODE(priv).vdm_bytespp; - MSG_DBG2( "vo_dga: vp_off=%d\n", priv->vp_offset); + MSG_DBG2( "vo_dga: vp_off=%d\n", priv.vp_offset); XGrabKeyboard (vo->mDisplay, DefaultRootWindow(vo->mDisplay), True, GrabModeAsync,GrabModeAsync, CurrentTime); @@ -723,27 +725,27 @@ // TODO: check if mem of graphics adaptor is large enough for dbf // set up variables for double buffering ... - priv->dbf_y_offset[0] = 0; - priv->dbf_mem_offset[0] = 0; - dest_frame_size = priv->width*HW_MODE.vdm_bytespp*priv->vp_height; + priv.dbf_y_offset[0] = 0; + priv.dbf_mem_offset[0] = 0; + dest_frame_size = priv.width*HW_MODE(priv).vdm_bytespp*priv.vp_height; - priv->num_buffers = (ram_size*1024)/dest_frame_size; - if(priv->num_buffers > vo_conf.xp_buffs) priv->num_buffers = vo_conf.xp_buffs; - if(priv->num_buffers > MAX_DRI_BUFFERS) priv->num_buffers = MAX_DRI_BUFFERS; + priv.num_buffers = (ram_size*1024)/dest_frame_size; + if(priv.num_buffers > vo_conf.xp_buffs) priv.num_buffers = vo_conf.xp_buffs; + if(priv.num_buffers > MAX_DRI_BUFFERS) priv.num_buffers = MAX_DRI_BUFFERS; - for(freq=1;freq<priv->num_buffers;freq++) { - priv->dbf_y_offset[freq] = priv->dbf_y_offset[freq-1] + priv->vp_height; - priv->dbf_mem_offset[freq] = priv->dbf_mem_offset[freq-1] + dest_frame_size; + for(freq=1;freq<priv.num_buffers;freq++) { + priv.dbf_y_offset[freq] = priv.dbf_y_offset[freq-1] + priv.vp_height; + priv.dbf_mem_offset[freq] = priv.dbf_mem_offset[freq-1] + dest_frame_size; } /* clear screen */ - for(freq=0;freq<priv->num_buffers;freq++) { + for(freq=0;freq<priv.num_buffers;freq++) { any_t*d; - d=(&((char*)priv->base)[priv->dbf_mem_offset[freq]]); + d=(&((char*)priv.base)[priv.dbf_mem_offset[freq]]); memset(d,0,dest_frame_size); } - MSG_V("vo_dga: Doublebuffering is %s.\n",priv->num_buffers>1?"enabled":"disabled"); - priv->is_running = 1; + MSG_V("vo_dga: Doublebuffering is %s.\n",priv.num_buffers>1?"enabled":"disabled"); + priv.is_running = 1; return MPXP_Ok; } @@ -753,25 +755,23 @@ MSG_V( "vo_dga: Unknown subdevice: %s\n",arg); return MPXP_False; } - priv_t*priv; - priv=new(zeromem) priv_t; + dga_priv_t*priv=new(zeromem) dga_priv_t; vo->priv=priv; - priv->num_buffers=1; return MPXP_Ok; } static void __FASTCALL__ dga_dri_get_surface_caps(vo_data_t*vo,dri_surface_cap_t *caps) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); caps->caps = DRI_CAP_VIDEO_MMAPED; - caps->fourcc=priv->dstFourcc; - caps->width=priv->vp_width; - caps->height=p... [truncated message content] |
From: <nic...@us...> - 2012-11-25 15:56:24
|
Revision: 454 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=454&view=rev Author: nickols_k Date: 2012-11-25 15:56:14 +0000 (Sun, 25 Nov 2012) Log Message: ----------- temporal solution: rename. But would be better to convert these structures into classes Modified Paths: -------------- mplayerxp/libao2/ao_alsa9.cpp mplayerxp/libao2/ao_arts.cpp mplayerxp/libao2/ao_esd.cpp mplayerxp/libao2/ao_jack.cpp mplayerxp/libao2/ao_nas.cpp mplayerxp/libao2/ao_null.cpp mplayerxp/libao2/ao_openal.cpp mplayerxp/libao2/ao_oss.cpp mplayerxp/libao2/ao_sdl.cpp mplayerxp/libao2/ao_wav.cpp mplayerxp/libao2/audio_out.cpp mplayerxp/libao2/audio_out.h mplayerxp/libao2/audio_out_internal.h mplayerxp/libmpcodecs/ad.h mplayerxp/libmpcodecs/ad_a52.cpp mplayerxp/libmpcodecs/ad_acm.cpp mplayerxp/libmpcodecs/ad_dca.cpp mplayerxp/libmpcodecs/ad_dmo.cpp mplayerxp/libmpcodecs/ad_dshow.cpp mplayerxp/libmpcodecs/ad_dvdpcm.cpp mplayerxp/libmpcodecs/ad_faad.cpp mplayerxp/libmpcodecs/ad_hwac3.cpp mplayerxp/libmpcodecs/ad_internal.h mplayerxp/libmpcodecs/ad_lavc.cpp mplayerxp/libmpcodecs/ad_libdv.cpp mplayerxp/libmpcodecs/ad_mp3.cpp mplayerxp/libmpcodecs/ad_null.cpp mplayerxp/libmpcodecs/ad_pcm.cpp mplayerxp/libmpcodecs/ad_qtaudio.cpp mplayerxp/libmpcodecs/ad_real.cpp mplayerxp/libmpcodecs/ad_twin.cpp mplayerxp/libmpcodecs/ad_vorbis.cpp mplayerxp/libmpcodecs/dec_audio.cpp mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpcodecs/vd.h mplayerxp/libmpcodecs/vd_divx4.cpp mplayerxp/libmpcodecs/vd_dmo.cpp mplayerxp/libmpcodecs/vd_dshow.cpp mplayerxp/libmpcodecs/vd_huffyuv.cpp mplayerxp/libmpcodecs/vd_internal.h mplayerxp/libmpcodecs/vd_lavc.cpp mplayerxp/libmpcodecs/vd_libdv.cpp mplayerxp/libmpcodecs/vd_libmpeg2.cpp mplayerxp/libmpcodecs/vd_mpegpes.cpp mplayerxp/libmpcodecs/vd_null.cpp mplayerxp/libmpcodecs/vd_nuv.cpp mplayerxp/libmpcodecs/vd_qtvideo.cpp mplayerxp/libmpcodecs/vd_raw.cpp mplayerxp/libmpcodecs/vd_real.cpp mplayerxp/libmpcodecs/vd_theora.cpp mplayerxp/libmpcodecs/vd_vfw.cpp mplayerxp/libmpcodecs/vd_xanim.cpp mplayerxp/libmpcodecs/vd_xvid.cpp mplayerxp/postproc/af.cpp mplayerxp/postproc/af.h mplayerxp/postproc/af_ao2.cpp mplayerxp/postproc/af_channels.cpp mplayerxp/postproc/af_control.h mplayerxp/postproc/af_crystality.cpp mplayerxp/postproc/af_delay.cpp mplayerxp/postproc/af_dyn.cpp mplayerxp/postproc/af_echo3d.cpp mplayerxp/postproc/af_equalizer.cpp mplayerxp/postproc/af_export.cpp mplayerxp/postproc/af_extrastereo.cpp mplayerxp/postproc/af_ffenc.cpp mplayerxp/postproc/af_format.cpp mplayerxp/postproc/af_hrtf.cpp mplayerxp/postproc/af_karaoke.cpp mplayerxp/postproc/af_lp.cpp mplayerxp/postproc/af_pan.cpp mplayerxp/postproc/af_raw.cpp mplayerxp/postproc/af_resample.cpp mplayerxp/postproc/af_scaletempo.cpp mplayerxp/postproc/af_sinesuppress.cpp mplayerxp/postproc/af_sub.cpp mplayerxp/postproc/af_surround.cpp mplayerxp/postproc/af_volnorm.cpp mplayerxp/postproc/af_volume.cpp mplayerxp/postproc/vf.cpp mplayerxp/postproc/vf.h mplayerxp/postproc/vf_1bpp.cpp mplayerxp/postproc/vf_2xsai.cpp mplayerxp/postproc/vf_aspect.cpp mplayerxp/postproc/vf_delogo.cpp mplayerxp/postproc/vf_denoise3d.cpp mplayerxp/postproc/vf_dint.cpp mplayerxp/postproc/vf_down3dright.cpp mplayerxp/postproc/vf_eq.cpp mplayerxp/postproc/vf_expand.cpp mplayerxp/postproc/vf_flip.cpp mplayerxp/postproc/vf_format.cpp mplayerxp/postproc/vf_menu.cpp mplayerxp/postproc/vf_mirror.cpp mplayerxp/postproc/vf_noise.cpp mplayerxp/postproc/vf_ow.cpp mplayerxp/postproc/vf_palette.cpp mplayerxp/postproc/vf_panscan.cpp mplayerxp/postproc/vf_perspective.cpp mplayerxp/postproc/vf_pp.cpp mplayerxp/postproc/vf_raw.cpp mplayerxp/postproc/vf_rectangle.cpp mplayerxp/postproc/vf_rgb2bgr.cpp mplayerxp/postproc/vf_rotate.cpp mplayerxp/postproc/vf_scale.cpp mplayerxp/postproc/vf_smartblur.cpp mplayerxp/postproc/vf_softpulldown.cpp mplayerxp/postproc/vf_test.cpp mplayerxp/postproc/vf_unsharp.cpp mplayerxp/postproc/vf_vo.cpp mplayerxp/postproc/vf_yuvcsp.cpp mplayerxp/postproc/vf_yuy2.cpp mplayerxp/postproc/vf_yvu9.cpp Modified: mplayerxp/libao2/ao_alsa9.cpp =================================================================== --- mplayerxp/libao2/ao_alsa9.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_alsa9.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -132,7 +132,7 @@ } /* to set/get/query special features/parameters */ -static MPXP_Rc __FASTCALL__ control(const ao_data_t* ao,int cmd, long arg) +static MPXP_Rc __FASTCALL__ control_ao(const ao_data_t* ao,int cmd, long arg) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); int rval; @@ -177,30 +177,30 @@ snd_mixer_selem_id_set_name(sid, mix_name); if ((err = snd_mixer_open(&handle, 0)) < 0) { - MSG_ERR("alsa-control: mixer open error: %s\n", snd_strerror(err)); + MSG_ERR("alsa-control_ao: mixer open error: %s\n", snd_strerror(err)); return MPXP_Error; } if ((err = snd_mixer_attach(handle, card)) < 0) { - MSG_ERR("alsa-control: mixer attach %s error: %s", card, snd_strerror(err)); + MSG_ERR("alsa-control_ao: mixer attach %s error: %s", card, snd_strerror(err)); snd_mixer_close(handle); return MPXP_Error; } if ((err = snd_mixer_selem_register(handle, NULL, NULL)) < 0) { - MSG_ERR("alsa-control: mixer register error: %s", snd_strerror(err)); + MSG_ERR("alsa-control_ao: mixer register error: %s", snd_strerror(err)); snd_mixer_close(handle); return MPXP_Error; } if ((err = snd_mixer_load(handle)) < 0) { - MSG_ERR("alsa-control: mixer load error: %s", snd_strerror(err)); + MSG_ERR("alsa-control_ao: mixer load error: %s", snd_strerror(err)); snd_mixer_close(handle); return MPXP_Error; } elem = snd_mixer_find_selem(handle, sid); if (!elem) { - MSG_ERR("alsa-control: unable to find simple control '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid)); + MSG_ERR("alsa-control_ao: unable to find simple control_ao '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid)); snd_mixer_close(handle); return MPXP_Error; } @@ -218,11 +218,11 @@ //setting channels if ((err = snd_mixer_selem_set_playback_volume(elem, snd_mixer_selem_channel_id_t(0), set_vol)) < 0) { - MSG_ERR("alsa-control: error setting left channel, %s",snd_strerror(err)); + MSG_ERR("alsa-control_ao: error setting left channel, %s",snd_strerror(err)); return MPXP_Error; } if ((err = snd_mixer_selem_set_playback_volume(elem, snd_mixer_selem_channel_id_t(1), set_vol)) < 0) { - MSG_ERR("alsa-control: error setting right channel, %s",snd_strerror(err)); + MSG_ERR("alsa-control_ao: error setting right channel, %s",snd_strerror(err)); return MPXP_Error; } } else { @@ -451,7 +451,7 @@ return MPXP_Ok; } // end init -static MPXP_Rc __FASTCALL__ configure(ao_data_t* ao,unsigned rate_hz,unsigned channels,unsigned format) +static MPXP_Rc __FASTCALL__ config_ao(ao_data_t* ao,unsigned rate_hz,unsigned channels,unsigned format) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); int err,i; @@ -572,7 +572,7 @@ chunk_size=size; } #endif - // gets buffersize for control + // gets buffersize for control_ao if ((err = snd_pcm_hw_params_get_buffer_size(priv->hwparams,&dummy)) < 0) { MSG_ERR("alsa-conf: unable to get buffersize: %s\n", snd_strerror(err)); return MPXP_False; @@ -625,7 +625,7 @@ ao->samplerate, ao->channels, priv->bytes_per_sample, ao->buffersize, snd_pcm_format_description(priv->format)); return MPXP_Ok; -} // end configure +} // end config_ao /* close audio device */ static void uninit(ao_data_t* ao) Modified: mplayerxp/libao2/ao_arts.cpp =================================================================== --- mplayerxp/libao2/ao_arts.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_arts.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -47,7 +47,7 @@ LIBAO_EXTERN(arts) -static MPXP_Rc control(const ao_data_t* ao,int cmd, long arg) +static MPXP_Rc control_ao(const ao_data_t* ao,int cmd, long arg) { UNUSED(ao); UNUSED(cmd); @@ -70,7 +70,7 @@ return MPXP_Ok; } -static MPXP_Rc __FASTCALL__ configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) +static MPXP_Rc __FASTCALL__ config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) { arts_stream_t stream; unsigned frag_spec,samplesize; Modified: mplayerxp/libao2/ao_esd.cpp =================================================================== --- mplayerxp/libao2/ao_esd.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_esd.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -93,7 +93,7 @@ /* * to set/get/query special features/parameters */ -static MPXP_Rc control(const ao_data_t* ao,int cmd, long arg) +static MPXP_Rc control_ao(const ao_data_t* ao,int cmd, long arg) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); esd_player_info_t *esd_pi; @@ -179,7 +179,7 @@ return MPXP_Ok; } -static MPXP_Rc configure(ao_data_t* ao,unsigned rate_hz,unsigned channels,unsigned format) +static MPXP_Rc config_ao(ao_data_t* ao,unsigned rate_hz,unsigned channels,unsigned format) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); char *server = ao->subdevice; /* NULL for localhost */ Modified: mplayerxp/libao2/ao_jack.cpp =================================================================== --- mplayerxp/libao2/ao_jack.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_jack.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -140,7 +140,7 @@ // end ring priv->buffer stuff -static MPXP_Rc control(const ao_data_t* ao,int cmd, long arg) { +static MPXP_Rc control_ao(const ao_data_t* ao,int cmd, long arg) { UNUSED(ao); UNUSED(cmd); UNUSED(arg); @@ -221,7 +221,7 @@ return MPXP_Ok; } -static MPXP_Rc configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) { +static MPXP_Rc config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); const char **matching_ports = NULL; char *port_name = NULL; Modified: mplayerxp/libao2/ao_nas.cpp =================================================================== --- mplayerxp/libao2/ao_nas.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_nas.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -366,7 +366,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(const ao_data_t* ao,int cmd, long arg) +static MPXP_Rc control_ao(const ao_data_t* ao,int cmd, long arg) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); AuElementParameters aep; @@ -402,7 +402,7 @@ AuSetElementParameters(priv->aud, 1, &aep, &as); if (as != AuSuccess) { nas_print_error(priv->aud, - "control(): AuSetElementParameters", as); + "control_ao(): AuSetElementParameters", as); retval = MPXP_Error; } else retval = MPXP_Ok; break; @@ -422,7 +422,7 @@ } // open & setup audio device // return: 1=success 0=fail -static MPXP_Rc configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) +static MPXP_Rc config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) { priv_t* priv=reinterpret_cast<priv_t*>(ao->priv); AuElement elms[3]; Modified: mplayerxp/libao2/ao_null.cpp =================================================================== --- mplayerxp/libao2/ao_null.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_null.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -97,7 +97,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc __FASTCALL__ control(const ao_data_t* ao,int cmd,long arg){ +static MPXP_Rc __FASTCALL__ control_ao(const ao_data_t* ao,int cmd,long arg){ UNUSED(ao); UNUSED(cmd); UNUSED(arg); @@ -121,7 +121,7 @@ return MPXP_Ok; } -static MPXP_Rc __FASTCALL__ configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format){ +static MPXP_Rc __FASTCALL__ config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format){ priv_t*priv = (priv_t*)ao->priv; unsigned bits; ao->buffersize= 0xFFFFF; Modified: mplayerxp/libao2/ao_openal.cpp =================================================================== --- mplayerxp/libao2/ao_openal.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_openal.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -59,7 +59,7 @@ int16_t* tmpbuf; }priv_t; -static MPXP_Rc control(const ao_data_t* ao,int cmd, long arg) { +static MPXP_Rc control_ao(const ao_data_t* ao,int cmd, long arg) { UNUSED(ao); switch (cmd) { case AOCONTROL_GET_VOLUME: @@ -104,7 +104,7 @@ return MPXP_Ok; } -static MPXP_Rc configure(ao_data_t* ao,unsigned rate, unsigned channels, unsigned format) +static MPXP_Rc config_ao(ao_data_t* ao,unsigned rate, unsigned channels, unsigned format) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); ALCcontext *ctx = NULL; Modified: mplayerxp/libao2/ao_oss.cpp =================================================================== --- mplayerxp/libao2/ao_oss.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_oss.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -43,7 +43,7 @@ const char *oss_mixer_device = PATH_DEV_MIXER; // to set/get/query special features/parameters -static MPXP_Rc __FASTCALL__ control(const ao_data_t* ao,int cmd,long arg){ +static MPXP_Rc __FASTCALL__ control_ao(const ao_data_t* ao,int cmd,long arg){ priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); int rval; switch(cmd){ @@ -242,7 +242,7 @@ return MPXP_Ok; } -static MPXP_Rc __FASTCALL__ configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) +static MPXP_Rc __FASTCALL__ config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) { priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); MSG_V("ao2: %d Hz %d chans %s\n",rate,channels, @@ -265,7 +265,7 @@ #endif goto ac3_retry; } else { - MSG_ERR("OSS-CONF: Can't configure for: %s\n",ao_format_name(format)); + MSG_ERR("OSS-CONF: Can't config_ao for: %s\n",ao_format_name(format)); show_fmts(ao); ao->format=format; return MPXP_False; Modified: mplayerxp/libao2/ao_sdl.cpp =================================================================== --- mplayerxp/libao2/ao_sdl.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_sdl.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -111,7 +111,7 @@ #endif // to set/get/query special features/parameters -static MPXP_Rc __FASTCALL__ control(const ao_data_t* ao,int cmd,long arg){ +static MPXP_Rc __FASTCALL__ control_ao(const ao_data_t* ao,int cmd,long arg){ priv_t*priv=reinterpret_cast<priv_t*>(ao->priv); switch (cmd) { case AOCONTROL_QUERY_FORMAT: @@ -160,7 +160,7 @@ return MPXP_Ok; } -static MPXP_Rc __FASTCALL__ configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) +static MPXP_Rc __FASTCALL__ config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format) { /* SDL Audio Specifications */ SDL_AudioSpec aspec, obtained; Modified: mplayerxp/libao2/ao_wav.cpp =================================================================== --- mplayerxp/libao2/ao_wav.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/ao_wav.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -86,7 +86,7 @@ /* init with default values */ // to set/get/query special features/parameters -static MPXP_Rc control(const ao_data_t* ao,int cmd,long arg){ +static MPXP_Rc control_ao(const ao_data_t* ao,int cmd,long arg){ UNUSED(ao); UNUSED(cmd); UNUSED(arg); @@ -105,7 +105,7 @@ return MPXP_Ok; } -static MPXP_Rc configure(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format){ +static MPXP_Rc config_ao(ao_data_t* ao,unsigned rate,unsigned channels,unsigned format){ priv_t* priv=reinterpret_cast<priv_t*>(ao->priv); unsigned bits; Modified: mplayerxp/libao2/audio_out.cpp =================================================================== --- mplayerxp/libao2/audio_out.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/audio_out.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -227,7 +227,7 @@ MPXP_Rc __FASTCALL__ ao_configure(ao_data_t*ao,unsigned rate,unsigned channels,unsigned format) { priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->audio_out->configure(ao,rate,channels,format); + return priv->audio_out->config_ao(ao,rate,channels,format); } void ao_uninit(ao_data_t*ao) @@ -294,7 +294,7 @@ { if(ao) { priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->audio_out->control(ao,cmd,arg); + return priv->audio_out->control_ao(ao,cmd,arg); } return MPXP_Error; } Modified: mplayerxp/libao2/audio_out.h =================================================================== --- mplayerxp/libao2/audio_out.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/audio_out.h 2012-11-25 15:56:14 UTC (rev 454) @@ -38,7 +38,7 @@ * @param arg argument associated with command * @return MPXP_Ok if success MPXP_False MPXP_Error MPXP_NA otherwise **/ - MPXP_Rc (* __FASTCALL__ control)(const ao_data_t*,int cmd,long arg); + MPXP_Rc (* __FASTCALL__ control_ao)(const ao_data_t*,int cmd,long arg); /** Preinitializes driver * @param flag currently unused @@ -52,7 +52,7 @@ * @param format specifies format of audio samples (see AFMT_* for detail) * @return 1 on successful configuration, 0 on error. **/ - MPXP_Rc (* __FASTCALL__ configure)(ao_data_t*,unsigned rate,unsigned channels,unsigned format); + MPXP_Rc (* __FASTCALL__ config_ao)(ao_data_t*,unsigned rate,unsigned channels,unsigned format); /** Closes driver. Should restore the original state of the system. **/ Modified: mplayerxp/libao2/audio_out_internal.h =================================================================== --- mplayerxp/libao2/audio_out_internal.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libao2/audio_out_internal.h 2012-11-25 15:56:14 UTC (rev 454) @@ -1,9 +1,9 @@ #include "mp_config.h" // prototypes: //static ao_info_t info; -static MPXP_Rc __FASTCALL__ control(const ao_data_t*,int cmd,long arg); +static MPXP_Rc __FASTCALL__ control_ao(const ao_data_t*,int cmd,long arg); static MPXP_Rc __FASTCALL__ init(ao_data_t*,unsigned flags); -static MPXP_Rc __FASTCALL__ configure(ao_data_t*,unsigned rate,unsigned channels,unsigned format); +static MPXP_Rc __FASTCALL__ config_ao(ao_data_t*,unsigned rate,unsigned channels,unsigned format); static void __FASTCALL__ uninit(ao_data_t*); static void __FASTCALL__ reset(ao_data_t*); static unsigned __FASTCALL__ get_space(const ao_data_t*); @@ -15,9 +15,9 @@ #define LIBAO_EXTERN(x) extern const ao_functions_t audio_out_##x =\ {\ &info,\ - control,\ + control_ao,\ init,\ - configure,\ + config_ao,\ uninit,\ reset,\ get_space,\ Modified: mplayerxp/libmpcodecs/ad.h =================================================================== --- mplayerxp/libmpcodecs/ad.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad.h 2012-11-25 15:56:14 UTC (rev 454) @@ -49,7 +49,7 @@ MPXP_Rc (* __FASTCALL__ preinit)(sh_audio_t *); MPXP_Rc (* __FASTCALL__ init)(sh_audio_t *sh); void (* __FASTCALL__ uninit)(sh_audio_t *sh); - MPXP_Rc (* control)(sh_audio_t *sh,int cmd,any_t* arg, ...); + MPXP_Rc (*control_ad)(sh_audio_t *sh,int cmd,any_t* arg, ...); unsigned (* __FASTCALL__ decode)(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts); } ad_functions_t; Modified: mplayerxp/libmpcodecs/ad_a52.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_a52.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_a52.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -207,7 +207,7 @@ delete sh->context; } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); switch(cmd) { Modified: mplayerxp/libmpcodecs/ad_acm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_acm.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_acm.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -159,7 +159,7 @@ delete sh->context; } -MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { int skip; switch(cmd) { Modified: mplayerxp/libmpcodecs/ad_dca.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dca.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_dca.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -207,7 +207,7 @@ delete sh->context; } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); switch(cmd) { Modified: mplayerxp/libmpcodecs/ad_dmo.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_dmo.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -70,7 +70,7 @@ delete priv; } -static MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +static MPXP_Rc control_ad(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { int skip; UNUSED(arg); Modified: mplayerxp/libmpcodecs/ad_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_dshow.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -63,7 +63,7 @@ delete priv; } -MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { int skip; UNUSED(arg); Modified: mplayerxp/libmpcodecs/ad_dvdpcm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dvdpcm.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_dvdpcm.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -83,7 +83,7 @@ UNUSED(sh); } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { int skip; UNUSED(arg); Modified: mplayerxp/libmpcodecs/ad_faad.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_faad.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_faad.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -275,7 +275,7 @@ delete sh->context; } -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +static MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(sh); UNUSED(cmd); Modified: mplayerxp/libmpcodecs/ad_hwac3.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_hwac3.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_hwac3.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -222,7 +222,7 @@ mpcodecs_ad_a52.uninit(sh); } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); switch(cmd) { Modified: mplayerxp/libmpcodecs/ad_internal.h =================================================================== --- mplayerxp/libmpcodecs/ad_internal.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_internal.h 2012-11-25 15:56:14 UTC (rev 454) @@ -15,7 +15,7 @@ static MPXP_Rc __FASTCALL__ init(sh_audio_t *sh); static MPXP_Rc __FASTCALL__ preinit(sh_audio_t *sh); static void __FASTCALL__ uninit(sh_audio_t *sh); -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...); +static MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...); static unsigned __FASTCALL__ decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts); #define LIBAD_EXTERN(x) extern const ad_functions_t mpcodecs_ad_##x = {\ @@ -25,7 +25,7 @@ preinit,\ init,\ uninit,\ - control,\ + control_ad,\ decode\ }; Modified: mplayerxp/libmpcodecs/ad_lavc.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_lavc.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_lavc.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -180,7 +180,7 @@ sh->context=NULL; } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); priv_t* priv = reinterpret_cast<priv_t*>(sh->context); Modified: mplayerxp/libmpcodecs/ad_libdv.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_libdv.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_libdv.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -90,7 +90,7 @@ delete priv->audioBuffers[i]; } -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +static MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { // TODO!!! UNUSED(sh); Modified: mplayerxp/libmpcodecs/ad_mp3.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_mp3.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_mp3.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -354,7 +354,7 @@ dlclose(dll_handle); } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(sh); UNUSED(cmd); @@ -375,7 +375,7 @@ int retval=-1; while(retval<0) { retval = MP3_DecodeFrame(buf,-1,pts); - if(retval<0) control(sh_audio,ADCTRL_RESYNC_STREAM,NULL); + if(retval<0) control_ad(sh_audio,ADCTRL_RESYNC_STREAM,NULL); } return retval; *************************** Modified: mplayerxp/libmpcodecs/ad_null.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_null.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_null.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -38,7 +38,7 @@ UNUSED(sh); } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(sh); UNUSED(cmd); Modified: mplayerxp/libmpcodecs/ad_pcm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_pcm.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_pcm.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -92,7 +92,7 @@ UNUSED(sh); } -MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { int skip; UNUSED(arg); Modified: mplayerxp/libmpcodecs/ad_qtaudio.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_qtaudio.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_qtaudio.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -307,7 +307,7 @@ return ConvertedBytes; } -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...){ +static MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...){ // various optional functions you MAY implement: UNUSED(sh); UNUSED(cmd); Modified: mplayerxp/libmpcodecs/ad_real.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_real.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_real.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -296,7 +296,7 @@ // or -1 for EOF (or uncorrectable error) } -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...){ +static MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...){ UNUSED(sh); UNUSED(arg); // various optional functions you MAY implement: Modified: mplayerxp/libmpcodecs/ad_twin.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_twin.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_twin.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -336,7 +336,7 @@ FreeLibrary(vqf_dll); } -MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) +MPXP_Rc control_ad(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { int skip; UNUSED(arg); Modified: mplayerxp/libmpcodecs/ad_vorbis.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_vorbis.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/ad_vorbis.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -136,7 +136,7 @@ delete sh->context; } -static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) +static MPXP_Rc control_ad(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(sh); UNUSED(cmd); Modified: mplayerxp/libmpcodecs/dec_audio.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_audio.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/dec_audio.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -369,7 +369,7 @@ sh_audio_t* sh_audio = priv->parent; if(sh_audio) { sh_audio->a_in_buffer_len=0; /* workaround */ - if(sh_audio->inited && priv->mpadec) priv->mpadec->control(sh_audio,ADCTRL_RESYNC_STREAM,NULL); + if(sh_audio->inited && priv->mpadec) priv->mpadec->control_ad(sh_audio,ADCTRL_RESYNC_STREAM,NULL); } } @@ -381,6 +381,6 @@ sh_audio_t* sh_audio = priv->parent; MPXP_Rc rc=MPXP_True; if(sh_audio) - if(sh_audio->inited && priv->mpadec) rc=priv->mpadec->control(sh_audio,ADCTRL_SKIP_FRAME,NULL); + if(sh_audio->inited && priv->mpadec) rc=priv->mpadec->control_ad(sh_audio,ADCTRL_SKIP_FRAME,NULL); if(rc!=MPXP_True) ds_fill_buffer(sh_audio->ds); } Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -54,7 +54,7 @@ priv_t* priv=(priv_t*)opaque; sh_video_t* sh_video = priv->parent; if(priv->mpvdec){ - MPXP_Rc ret=priv->mpvdec->control(sh_video,VDCTRL_QUERY_MAX_PP_LEVEL,quality); + MPXP_Rc ret=priv->mpvdec->control_vd(sh_video,VDCTRL_QUERY_MAX_PP_LEVEL,quality); if(ret>=MPXP_Ok) return ret; } return MPXP_False; @@ -64,7 +64,7 @@ priv_t* priv=(priv_t*)opaque; sh_video_t* sh_video = priv->parent; if(priv->mpvdec) - return priv->mpvdec->control(sh_video,VDCTRL_SET_PP_LEVEL, (any_t*)(&quality)); + return priv->mpvdec->control_vd(sh_video,VDCTRL_SET_PP_LEVEL, (any_t*)(&quality)); return MPXP_False; } @@ -76,8 +76,8 @@ vf_equalizer_t eq; eq.item=item; eq.value=value*10; - if(vf->control(vf,VFCTRL_SET_EQUALIZER,&eq)!=MPXP_True) { - if(priv->mpvdec) return priv->mpvdec->control(sh_video,VDCTRL_SET_EQUALIZER,(any_t*)item,(int)value); + if(vf->control_vf(vf,VFCTRL_SET_EQUALIZER,&eq)!=MPXP_True) { + if(priv->mpvdec) return priv->mpvdec->control_vd(sh_video,VDCTRL_SET_EQUALIZER,(any_t*)item,(int)value); } return MPXP_False; } @@ -291,7 +291,7 @@ vf=sh_video->vfilter; t=GetTimer(); - vf->control(vf,VFCTRL_START_FRAME,NULL); + vf->control_vf(vf,VFCTRL_START_FRAME,NULL); sh_video->active_slices=0; mpi=priv->mpvdec->decode(sh_video, frame); @@ -333,7 +333,7 @@ priv_t* priv=(priv_t*)opaque; sh_video_t* sh_video = priv->parent; if(sh_video) - if(sh_video->inited && priv->mpvdec) priv->mpvdec->control(sh_video,VDCTRL_RESYNC_STREAM,NULL); + if(sh_video->inited && priv->mpvdec) priv->mpvdec->control_vd(sh_video,VDCTRL_RESYNC_STREAM,NULL); } #ifdef USE_SUB @@ -436,7 +436,7 @@ if((flags&VFCAP_CSP_SUPPORTED_BY_HW) || ((flags&VFCAP_CSP_SUPPORTED) && j<0)){ // check (query) if codec really support this outfmt... sh->outfmtidx=j; // pass index to the control() function this way - if(priv->mpvdec->control(sh,VDCTRL_QUERY_FORMAT,&out_fmt)==MPXP_False) { + if(priv->mpvdec->control_vd(sh,VDCTRL_QUERY_FORMAT,&out_fmt)==MPXP_False) { MSG_DBG2("vo_debug: codec[%s] query_format(%s) returned FALSE\n",priv->mpvdec->info->driver_name,vo_format_name(out_fmt)); continue; } @@ -446,7 +446,7 @@ } else if(!palette && !(vo_data->flags&3) && (out_fmt==IMGFMT_RGB8||out_fmt==IMGFMT_BGR8)){ sh->outfmtidx=j; // pass index to the control() function this way - if(priv->mpvdec->control(sh,VDCTRL_QUERY_FORMAT,&out_fmt)!=MPXP_False) + if(priv->mpvdec->control_vd(sh,VDCTRL_QUERY_FORMAT,&out_fmt)!=MPXP_False) palette=1; } } @@ -554,7 +554,7 @@ "MPlayerXP",vo_format_name(out_fmt)); MSG_DBG2("vf configuring: %s\n",vf->info->name); - if(vf->config(vf,sh->src_w,sh->src_h, + if(vf->config_vf(vf,sh->src_w,sh->src_h, screen_size_x,screen_size_y, vo_data->flags, out_fmt)==0){ Modified: mplayerxp/libmpcodecs/vd.h =================================================================== --- mplayerxp/libmpcodecs/vd.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd.h 2012-11-25 15:56:14 UTC (rev 454) @@ -55,7 +55,7 @@ const video_probe_t*(*__FASTCALL__ probe)(sh_video_t *sh,uint32_t fourcc); MPXP_Rc (*__FASTCALL__ init)(sh_video_t *sh,any_t* libinput); void (*__FASTCALL__ uninit)(sh_video_t *sh); - MPXP_Rc (* control)(sh_video_t *sh,int cmd,any_t* arg, ...); + MPXP_Rc (*control_vd)(sh_video_t *sh,int cmd,any_t* arg, ...); mp_image_t* (*__FASTCALL__ decode)(sh_video_t *sh,const enc_frame_t* frame); } vd_functions_t; Modified: mplayerxp/libmpcodecs/vd_divx4.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_divx4.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_divx4.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -159,7 +159,7 @@ static any_t*dll_handle; // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ priv_t*p=reinterpret_cast<priv_t*>(sh->context); switch(cmd){ case VDCTRL_QUERY_MAX_PP_LEVEL: Modified: mplayerxp/libmpcodecs/vd_dmo.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dmo.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_dmo.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -30,7 +30,7 @@ static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd){ case VDCTRL_QUERY_FORMAT: if (*((int*)arg) == IMGFMT_YV12 || Modified: mplayerxp/libmpcodecs/vd_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dshow.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_dshow.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -32,7 +32,7 @@ static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd){ case VDCTRL_QUERY_MAX_PP_LEVEL: *((unsigned*)arg)=4; Modified: mplayerxp/libmpcodecs/vd_huffyuv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -174,7 +174,7 @@ // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...) +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...) { switch(cmd) { case VDCTRL_QUERY_FORMAT: Modified: mplayerxp/libmpcodecs/vd_internal.h =================================================================== --- mplayerxp/libmpcodecs/vd_internal.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_internal.h 2012-11-25 15:56:14 UTC (rev 454) @@ -13,7 +13,7 @@ //static const config_t options[]; static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc); -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...); +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...); static MPXP_Rc __FASTCALL__ init(sh_video_t *sh,any_t* libinput); static void __FASTCALL__ uninit(sh_video_t *sh); static mp_image_t* __FASTCALL__ decode(sh_video_t *sh,const enc_frame_t* frame); @@ -24,7 +24,7 @@ probe, \ init,\ uninit,\ - control,\ + control_vd,\ decode\ }; Modified: mplayerxp/libmpcodecs/vd_lavc.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_lavc.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_lavc.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -128,7 +128,7 @@ }; /* to set/get/query special features/parameters */ -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ priv_t *ctx = reinterpret_cast<priv_t*>(sh->context); uint32_t out_fourcc; AVCodecContext *avctx = ctx->ctx; Modified: mplayerxp/libmpcodecs/vd_libdv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libdv.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_libdv.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -61,7 +61,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ return MPXP_Unknown; } Modified: mplayerxp/libmpcodecs/vd_libmpeg2.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -241,7 +241,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ priv_t *priv=reinterpret_cast<priv_t*>(sh->context); switch(cmd) { case VDCTRL_RESYNC_STREAM: Modified: mplayerxp/libmpcodecs/vd_mpegpes.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_mpegpes.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_mpegpes.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -96,7 +96,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ return MPXP_Unknown; } Modified: mplayerxp/libmpcodecs/vd_null.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_null.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_null.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -22,7 +22,7 @@ static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ return MPXP_Unknown; } Modified: mplayerxp/libmpcodecs/vd_nuv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_nuv.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_nuv.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -36,7 +36,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd) { case VDCTRL_QUERY_FORMAT: if (*((int*)arg) == IMGFMT_I420 || Modified: mplayerxp/libmpcodecs/vd_qtvideo.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_qtvideo.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_qtvideo.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -98,7 +98,7 @@ static OSErr (*NewHandleClear)(Size byteCount); // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd) { case VDCTRL_QUERY_FORMAT: if (*((int*)arg) == IMGFMT_YV12 || Modified: mplayerxp/libmpcodecs/vd_raw.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_raw.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_raw.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -78,7 +78,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd) { case VDCTRL_QUERY_FORMAT: return MPXP_True; Modified: mplayerxp/libmpcodecs/vd_real.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_real.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_real.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -96,7 +96,7 @@ // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd){ // case VDCTRL_QUERY_MAX_PP_LEVEL: // *((unsigned*)arg)=9; Modified: mplayerxp/libmpcodecs/vd_theora.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_theora.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_theora.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -53,7 +53,7 @@ } priv_t; // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd) { case VDCTRL_QUERY_FORMAT: if (*((int*)arg) == IMGFMT_YV12) Modified: mplayerxp/libmpcodecs/vd_vfw.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -215,7 +215,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ priv_t *priv = reinterpret_cast<priv_t*>(sh->context); switch(cmd){ case VDCTRL_QUERY_MAX_PP_LEVEL: Modified: mplayerxp/libmpcodecs/vd_xanim.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_xanim.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_xanim.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -881,7 +881,7 @@ /*************************** END OF XA CODEC BINARY INTERFACE ******************/ // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ switch(cmd) { case VDCTRL_QUERY_FORMAT: if (*((int*)arg) == IMGFMT_YV12 || Modified: mplayerxp/libmpcodecs/vd_xvid.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_xvid.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/libmpcodecs/vd_xvid.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -511,7 +511,7 @@ } // to set/get/query special features/parameters -static MPXP_Rc control(sh_video_t *sh,int cmd,any_t* arg,...){ +static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...){ priv_t* priv = reinterpret_cast<priv_t*>(sh->context); switch(cmd){ case VDCTRL_QUERY_MAX_PP_LEVEL: Modified: mplayerxp/postproc/af.cpp =================================================================== --- mplayerxp/postproc/af.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -139,9 +139,9 @@ // Initialize the new filter if(MPXP_Ok == _new->info->open(_new) && - MPXP_Error < _new->control(_new,AF_CONTROL_POST_CREATE,&s->cfg)){ + MPXP_Error < _new->control_af(_new,AF_CONTROL_POST_CREATE,&s->cfg)){ if(cmdline){ - if(MPXP_Error<_new->control(_new,AF_CONTROL_COMMAND_LINE,cmdline)) { + if(MPXP_Error<_new->control_af(_new,AF_CONTROL_COMMAND_LINE,cmdline)) { delete cmdline; return _new; } @@ -217,7 +217,7 @@ MSG_V("[libaf] Removing filter %s \n",af->info->name); // Notify filter before changing anything - af->control(af,AF_CONTROL_PRE_DESTROY,0); + af->control_af(af,AF_CONTROL_PRE_DESTROY,0); // Detach pointers if(af->prev) @@ -250,7 +250,7 @@ if(!af->prev) memcpy(&in,&(s->input),sizeof(af_conf_t)); else memcpy(&in,&af->prev->conf,sizeof(af_conf_t)); - rv = af->config(af,&in); + rv = af->config_af(af,&in); memcpy(&in,&af->conf,sizeof(af_conf_t)); switch(rv){ case MPXP_Ok: break; @@ -261,26 +261,26 @@ // Insert channels filter if((af->prev?af->prev->conf.nch:s->input.nch) != in.nch){ if(NULL == (_new = af_prepend(s,af,"channels"))) return MPXP_Error; - if(MPXP_Ok != (rv = _new->control(_new,AF_CONTROL_CHANNELS,&in.nch))) return rv; + if(MPXP_Ok != (rv = _new->control_af(_new,AF_CONTROL_CHANNELS,&in.nch))) return rv; // Initialize channels filter if(!_new->prev) memcpy(&in,&(s->input),sizeof(af_conf_t)); else memcpy(&in,&_new->prev->conf,sizeof(af_conf_t)); - if(MPXP_Ok != (rv = _new->config(_new,&in))) return rv; + if(MPXP_Ok != (rv = _new->config_af(_new,&in))) return rv; } // Insert rate filter if((af->prev?af->prev->conf.rate:s->input.rate) != in.rate){ if(NULL == (_new = af_prepend(s,af,"resample"))) return MPXP_Error; - if(MPXP_Ok != (rv = _new->control(_new,AF_CONTROL_RESAMPLE_RATE,&in.rate))) return rv; + if(MPXP_Ok != (rv = _new->control_af(_new,AF_CONTROL_RESAMPLE_RATE,&in.rate))) return rv; // Initialize channels filter if(!_new->prev) memcpy(&in,&(s->input),sizeof(af_conf_t)); else memcpy(&in,&_new->prev->conf,sizeof(af_conf_t)); - if(MPXP_Ok != (rv = _new->config(_new,&in))) { + if(MPXP_Ok != (rv = _new->config_af(_new,&in))) { af_instance_t* af2 = af_prepend(s,af,"format"); // Init the _new filter if(af2) { - if((MPXP_Ok != af2->control(af2,AF_CONTROL_FORMAT,&in.format))) return -1; + if((MPXP_Ok != af2->control_af(af2,AF_CONTROL_FORMAT,&in.format))) return -1; if(MPXP_Ok != af_reinit(s,af2)) return MPXP_Error; - rv = _new->config(_new,&in); + rv = _new->config_af(_new,&in); } return rv; } @@ -288,11 +288,11 @@ // Insert format filter if(((af->prev?af->prev->conf.format:s->input.format) != in.format)) { if(NULL == (_new = af_prepend(s,af,"format"))) return MPXP_Error; - if(MPXP_Ok != (rv = _new->control(_new,AF_CONTROL_FORMAT,&in.format))) return rv; + if(MPXP_Ok != (rv = _new->control_af(_new,AF_CONTROL_FORMAT,&in.format))) return rv; // Initialize format filter if(!_new->prev) memcpy(&in,&(s->input),sizeof(af_conf_t)); else memcpy(&in,&_new->prev->conf,sizeof(af_conf_t)); - if(MPXP_Ok != (rv = _new->config(_new,&in))) return rv; + if(MPXP_Ok != (rv = _new->config_af(_new,&in))) return rv; } if(!_new){ // Should _never_ happen MSG_ERR("[libaf] Unable to correct audio format. " @@ -404,14 +404,14 @@ } } // Init the _new filter - if(!af || (MPXP_Ok != af->control(af,AF_CONTROL_RESAMPLE_RATE, + if(!af || (MPXP_Ok != af->control_af(af,AF_CONTROL_RESAMPLE_RATE, &(s->output.rate)))) return MPXP_False; // Use lin int if the user wants fast if ((AF_INIT_TYPE_MASK & s->cfg.force) == AF_INIT_FAST) { char args[32]; sprintf(args, "%d:0:0", s->output.rate); - af->control(af, AF_CONTROL_COMMAND_LINE, args); + af->control_af(af, AF_CONTROL_COMMAND_LINE, args); } if(MPXP_Ok != af_reinit(s,af)) return MPXP_False; @@ -425,7 +425,7 @@ else af = af_append(s,s->last,"channels"); // Init the _new filter - if(!af || (MPXP_Ok != af->control(af,AF_CONTROL_CHANNELS,&(s->output.nch)))) + if(!af || (MPXP_Ok != af->control_af(af,AF_CONTROL_CHANNELS,&(s->output.nch)))) return MPXP_False; if(MPXP_Ok != af_reinit(s,af)) return MPXP_False; @@ -438,7 +438,7 @@ else af = s->last; // Init the _new filter - if(!af ||(MPXP_Ok != af->control(af,AF_CONTROL_FORMAT,&s->output.format))) + if(!af ||(MPXP_Ok != af->control_af(af,AF_CONTROL_FORMAT,&s->output.format))) return MPXP_False; if(MPXP_Ok != af_reinit(s,af)) return MPXP_False; @@ -559,13 +559,13 @@ return delay; } -// send control to all filters, starting with the last until +// send control_af to all filters, starting with the last until // one responds with MPXP_Ok MPXP_Rc __FASTCALL__ af_control_any_rev (af_stream_t* s, int cmd, any_t* arg) { MPXP_Rc res = MPXP_Unknown; af_instance_t* filt = s->last; while (filt && res != MPXP_Ok) { - res = filt->control(filt, cmd, arg); + res = filt->control_af(filt, cmd, arg); filt = filt->prev; } return res; @@ -629,7 +629,7 @@ check_pin("afilter",af->pin,AF_PIN); do{ MSG_INFO(" "); - if(af->control(af,AF_CONTROL_SHOWCONF,NULL)!=MPXP_Ok) + if(af->control_af(af,AF_CONTROL_SHOWCONF,NULL)!=MPXP_Ok) MSG_INFO("[af_%s %s]\n",af->info->name,af->info->info); af=af->next; }while(af); Modified: mplayerxp/postproc/af.h =================================================================== --- mplayerxp/postproc/af.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af.h 2012-11-25 15:56:14 UTC (rev 454) @@ -50,8 +50,8 @@ const af_info_t* info; char antiviral_hole[RND_CHAR6]; unsigned pin; // personal identification number - MPXP_Rc (* __FASTCALL__ config)(struct af_instance_s* af, const af_conf_t* arg); - MPXP_Rc (* __FASTCALL__ control)(struct af_instance_s* af, int cmd, any_t* arg); + MPXP_Rc (* __FASTCALL__ config_af)(struct af_instance_s* af, const af_conf_t* arg); + MPXP_Rc (* __FASTCALL__ control_af)(struct af_instance_s* af, int cmd, any_t* arg); void (* __FASTCALL__ uninit)(struct af_instance_s* af); mp_aframe_t* (* __FASTCALL__ play)(struct af_instance_s* af,const mp_aframe_t* data); any_t* setup; // setup data for this specific instance and filter Modified: mplayerxp/postproc/af_ao2.cpp =================================================================== --- mplayerxp/postproc/af_ao2.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_ao2.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -109,8 +109,8 @@ mpaf_format_e format; }af_ao2_t; -// Initialization and runtime control -static MPXP_Rc __FASTCALL__ config(struct af_instance_s* af, const af_conf_t* arg) +// Initialization and runtime control_af +static MPXP_Rc __FASTCALL__ config_af(struct af_instance_s* af, const af_conf_t* arg) { af_ao2_t* s = reinterpret_cast<af_ao2_t*>(af->setup); /* Sanity check */ @@ -121,7 +121,7 @@ return af_test_output(af,arg); } -static MPXP_Rc __FASTCALL__ control(struct af_instance_s* af, int cmd, any_t* arg) +static MPXP_Rc __FASTCALL__ control_af(struct af_instance_s* af, int cmd, any_t* arg) { af_ao2_t* s = reinterpret_cast<af_ao2_t*>(af->setup); UNUSED(arg); @@ -155,8 +155,8 @@ // Allocate memory and set function pointers static MPXP_Rc __FASTCALL__ af_open(af_instance_t* af){ - af->config=config; - af->control=control; + af->config_af=config_af; + af->control_af=control_af; af->uninit=uninit; af->play=play; af->mul.d=1; Modified: mplayerxp/postproc/af_channels.cpp =================================================================== --- mplayerxp/postproc/af_channels.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_channels.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -122,7 +122,7 @@ return MPXP_Ok; } -static MPXP_Rc __FASTCALL__ config(struct af_instance_s* af,const af_conf_t* arg) +static MPXP_Rc __FASTCALL__ config_af(struct af_instance_s* af,const af_conf_t* arg) { af_channels_t* s = reinterpret_cast<af_channels_t*>(af->setup); // Set default channel assignment @@ -155,8 +155,8 @@ af->mul.d = arg->nch; return check_routes(s,arg->nch,af->conf.nch); } -// Initialization and runtime control -static MPXP_Rc __FASTCALL__ control(struct af_instance_s* af, int cmd, any_t* arg) +// Initialization and runtime control_af +static MPXP_Rc __FASTCALL__ control_af(struct af_instance_s* af, int cmd, any_t* arg) { af_channels_t* s = reinterpret_cast<af_channels_t*>(af->setup); switch(cmd){ @@ -189,7 +189,7 @@ } } - if(MPXP_Ok != af->control(af,AF_CONTROL_CHANNELS | AF_CONTROL_SET ,&nch)) + if(MPXP_Ok != af->control_af(af,AF_CONTROL_CHANNELS | AF_CONTROL_SET ,&nch)) return MPXP_Error; return MPXP_Ok; } @@ -277,8 +277,8 @@ // Allocate memory and set function pointers static MPXP_Rc __FASTCALL__ af_open(af_instance_t* af){ - af->config=config; - af->control=control; + af->config_af=config_af; + af->control_af=control_af; af->uninit=uninit; af->play=play; af->mul.n=1; Modified: mplayerxp/postproc/af_control.h =================================================================== --- mplayerxp/postproc/af_control.h 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_control.h 2012-11-25 15:56:14 UTC (rev 454) @@ -48,7 +48,7 @@ /********************************************* -// Extended control used with arguments that operates on only one +// Extended control_af used with arguments that operates on only one // channel at the time */ typedef struct af_control_ext_s{ @@ -60,7 +60,7 @@ // Control parameters */ -/* The control system is divided into 3 levels +/* The control_af system is divided into 3 levels mandatory calls - all filters must answer to all of these optional calls - are optional filter specific calls - applies only to some filters @@ -98,7 +98,7 @@ enum { AF_CONTROL_SET =0x00000000, // Set argument AF_CONTROL_GET =0x00000001, // Get argument - AF_CONTROL_INFO =0x00000002, // Get info about the control, i.e fill in everything except argument + AF_CONTROL_INFO =0x00000002, // Get info about the control_af, i.e fill in everything except argument // Resample AF_CONTROL_RESAMPLE_RATE =0x00000100|AF_CONTROL_FILTER_SPECIFIC, // Set output rate in resample AF_CONTROL_RESAMPLE_SLOPPY =0x00000200|AF_CONTROL_FILTER_SPECIFIC, // Enable sloppy resampling @@ -112,7 +112,7 @@ AF_CONTROL_CHANNELS_NR =0x00000800|AF_CONTROL_FILTER_SPECIFIC, // Set nuber of channel routing pairs, arg is int* AF_CONTROL_CHANNELS_ROUTER =0x00000900|AF_CONTROL_FILTER_SPECIFIC, // Set make af_channels into a router // Volume - AF_CONTROL_VOLUME_ON_OFF =0x00000A00|AF_CONTROL_FILTER_SPECIFIC, // Turn volume control on and off, arg is int* + AF_CONTROL_VOLUME_ON_OFF =0x00000A00|AF_CONTROL_FILTER_SPECIFIC, // Turn volume control_af on and off, arg is int* AF_CONTROL_VOLUME_SOFTCLIP =0x00000B00|AF_CONTROL_FILTER_SPECIFIC, // Turn soft clipping of the volume on and off, arg is binary AF_CONTROL_VOLUME_LEVEL =0x00000C00|AF_CONTROL_FILTER_SPECIFIC, // Set volume level, arg is a float* with the volume for all the channels AF_CONTROL_VOLUME_PROBE =0x00000D00|AF_CONTROL_FILTER_SPECIFIC, // Probed power level for all channels, arg is a float* Modified: mplayerxp/postproc/af_crystality.cpp =================================================================== --- mplayerxp/postproc/af_crystality.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_crystality.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -500,8 +500,8 @@ return af_test_output(af,arg); } -// Initialization and runtime control -static MPXP_Rc __FASTCALL__ control(struct af_instance_s* af, int cmd, any_t* arg) +// Initialization and runtime control_af +static MPXP_Rc __FASTCALL__ control_af(struct af_instance_s* af, int cmd, any_t* arg) { af_crystality_t* s = (af_crystality_t*)af->setup; @@ -544,8 +544,8 @@ // Allocate memory and set function pointers static MPXP_Rc __FASTCALL__ af_open(af_instance_t* af){ - af->config =af_config; - af->control=control; + af->config_af =af_config; + af->control_af=control_af; af->uninit=uninit; af->play=play; af->mul.n=1; Modified: mplayerxp/postproc/af_delay.cpp =================================================================== --- mplayerxp/postproc/af_delay.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_delay.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -27,8 +27,8 @@ float d[AF_NCH]; // Delay [ms] }af_delay_t; -// Initialization and runtime control -static MPXP_Rc __FASTCALL__ control(struct af_instance_s* af, int cmd, any_t* arg) +// Initialization and runtime control_af +static MPXP_Rc __FASTCALL__ control_af(struct af_instance_s* af, int cmd, any_t* arg) { af_delay_t* s = reinterpret_cast<af_delay_t*>(af->setup); @@ -91,7 +91,7 @@ s->q[i] = mp_calloc(L,af->conf.format&MPAF_BPS_MASK); if(NULL == s->q[i]) MSG_FATAL(MSGTR_OutOfMemory); } - return control(af,AF_CONTROL_DELAY_LEN | AF_CONTROL_SET,s->d); + return control_af(af,AF_CONTROL_DELAY_LEN | AF_CONTROL_SET,s->d); } // Deallocate memory @@ -171,8 +171,8 @@ // Allocate memory and set function pointers static MPXP_Rc __FASTCALL__ af_open(af_instance_t* af){ - af->config=af_config; - af->control=control; + af->config_af=af_config; + af->control_af=control_af; af->uninit=uninit; af->play=play; af->mul.n=1; Modified: mplayerxp/postproc/af_dyn.cpp =================================================================== --- mplayerxp/postproc/af_dyn.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_dyn.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -28,7 +28,7 @@ float gain; }af_dyn_t; -static MPXP_Rc __FASTCALL__ config(struct af_instance_s* af,const af_conf_t* arg) +static MPXP_Rc __FASTCALL__ config_af(struct af_instance_s* af,const af_conf_t* arg) { // Sanity check if(!arg) return MPXP_Error; @@ -41,8 +41,8 @@ } // Data for specific instances of this filter -// Initialization and runtime control -static MPXP_Rc __FASTCALL__ control(struct af_instance_s* af, int cmd, any_t* arg) +// Initialization and runtime control_af +static MPXP_Rc __FASTCALL__ control_af(struct af_instance_s* af, int cmd, any_t* arg) { af_dyn_t* s = (af_dyn_t*)af->setup; switch(cmd){ @@ -94,8 +94,8 @@ // Allocate memory and set function pointers static MPXP_Rc __FASTCALL__ af_open(af_instance_t* af){ - af->config=config; - af->control=control; + af->config_af=config_af; + af->control_af=control_af; af->uninit=uninit; af->play=play; af->mul.n=1; Modified: mplayerxp/postproc/af_echo3d.cpp =================================================================== --- mplayerxp/postproc/af_echo3d.cpp 2012-11-25 15:25:05 UTC (rev 453) +++ mplayerxp/postproc/af_echo3d.cpp 2012-11-25 15:56:14 UTC (rev 454) @@ -164,8 +164,8 @@ return af_test_output(af,arg); } -// Initialization and runtime control -static MPXP_Rc __FASTCALL__ control(struct af_instance_s* af, int cmd, any_t* arg) +// Initialization and runtime control_af +static MPXP_Rc __FASTCALL__ control_af(struct af_instance_s* af, int cmd, any_t* arg) { af_crystality_t* s = (af_crystality_t*)af->setup; @@ -198,8 +198,8 @@ // Allocate memory and set function pointers static MPXP_Rc __FASTCALL__ af_open(af_instance_t* af){ - af->config=af_config; - af->control=control; + af->config_af=af_conf... [truncated message content] |
From: <nic...@us...> - 2012-11-26 09:04:07
|
Revision: 456 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=456&view=rev Author: nickols_k Date: 2012-11-26 09:03:57 +0000 (Mon, 26 Nov 2012) Log Message: ----------- simplify logic Modified Paths: -------------- mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out.h mplayerxp/libvo/video_out_internal.h mplayerxp/libvo/vo_fbdev.cpp mplayerxp/libvo/vo_null.cpp mplayerxp/libvo/vo_opengl.cpp mplayerxp/libvo/vo_sdl.cpp mplayerxp/libvo/vo_vesa.cpp mplayerxp/libvo/vo_x11.cpp mplayerxp/libvo/vo_xv.cpp mplayerxp/libvo/x11_system.cpp mplayerxp/libvo/x11_system.h mplayerxp/osdep/vbelib.cpp mplayerxp/osdep/vbelib.h Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/video_out.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -396,7 +396,7 @@ static int vo_inited=0; MPXP_Rc __FASTCALL__ vo_config(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, uint32_t fullscreen, char *title, + uint32_t d_height, uint32_t fullscreen, const char *title, uint32_t format) { vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); @@ -408,6 +408,7 @@ return MPXP_False; } vo_inited++; + vo->flags=fullscreen; dest_fourcc = format; priv.org_width = width; priv.org_height = height; @@ -421,7 +422,7 @@ priv.dri.d_height = d_h; MSG_V("priv.video_out->config(%u,%u,%u,%u,0x%x,'%s',%s)\n" ,w,h,d_w,d_h,fullscreen,title,vo_format_name(dest_fourcc)); - retval = priv.video_out->config_vo(vo,w,h,d_w,d_h,fullscreen,title,dest_fourcc); + retval = priv.video_out->config_vo(vo,w,h,d_w,d_h,title,dest_fourcc); priv.srcFourcc=format; if(retval == MPXP_Ok) { int dri_retv; Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/video_out.h 2012-11-26 09:03:57 UTC (rev 456) @@ -172,9 +172,6 @@ int flags; -// requested resolution/bpp: (-x -y -bpp options) - vo_rect_t dest; - video_private* vo_priv;/* private data of vo structure */ video_private* priv; /* private data of video driver */ video_private* priv3; /* private data of vidix commons */ @@ -224,9 +221,9 @@ * @param format fourcc of source image * @return zero on successful initialization, non-zero on error. **/ - MPXP_Rc (* __FASTCALL__ config_vo)(vo_data_t* vo,uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, uint32_t fullscreen, char *title, - uint32_t format); + MPXP_Rc (* __FASTCALL__ config_vo)(vo_data_t* vo, + uint32_t width, uint32_t height, uint32_t d_width, + uint32_t d_height,const char *title, uint32_t format); /** Control interface * @param request command. See VOCTRL_** for detail @@ -261,7 +258,7 @@ extern const vo_info_t* vo_get_info(vo_data_t* vo); extern MPXP_Rc __FASTCALL__ vo_init(vo_data_t* vo,const char *subdevice_name); extern MPXP_Rc __FASTCALL__ vo_config(vo_data_t* vo,uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, uint32_t fullscreen, char *title, + uint32_t d_height, uint32_t fullscreen,const char *title, uint32_t format); extern uint32_t __FASTCALL__ vo_query_format(vo_data_t* vo,uint32_t* fourcc,unsigned src_w,unsigned src_h); extern MPXP_Rc vo_reset(vo_data_t* vo); Modified: mplayerxp/libvo/video_out_internal.h =================================================================== --- mplayerxp/libvo/video_out_internal.h 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/video_out_internal.h 2012-11-26 09:03:57 UTC (rev 456) @@ -24,7 +24,7 @@ #define __VIDEO_OUT_INTERNAL_H 1 static MPXP_Rc __FASTCALL__ control_vo(vo_data_t*vo,uint32_t request, any_t*data); static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, uint32_t fullscreen, char *title, + uint32_t d_height, const char *title, uint32_t format); static const vo_info_t* __FASTCALL__ get_info(const vo_data_t*vo); static void __FASTCALL__ select_frame(vo_data_t*vo,unsigned idx); Modified: mplayerxp/libvo/vo_fbdev.cpp =================================================================== --- mplayerxp/libvo/vo_fbdev.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_fbdev.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -841,7 +841,7 @@ } static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, uint32_t fullscreen, char *title, + uint32_t d_height, const char *title, uint32_t format) { fbdev_priv_t& priv = *static_cast<fbdev_priv_t*>(vo->priv); @@ -849,7 +849,6 @@ unsigned x_offset,y_offset,i; UNUSED(title); - UNUSED(fullscreen); priv.srcFourcc = format; if((int)priv.pre_init_err == MPXP_Error) { MSG_ERR(FBDEV "Internal fatal error: init() was called before preinit()\n"); Modified: mplayerxp/libvo/vo_null.cpp =================================================================== --- mplayerxp/libvo/vo_null.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_null.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -64,7 +64,7 @@ UNUSED(idx); } -static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) +static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,const char *title, uint32_t format) { null_priv_t&priv=*static_cast<null_priv_t*>(vo->priv); unsigned awidth; @@ -75,7 +75,6 @@ priv.fourcc=format; UNUSED(d_width); UNUSED(d_height); - UNUSED(fullscreen); UNUSED(title); priv.pitch_y=priv.pitch_u=priv.pitch_v=1; priv.offset_y=priv.offset_u=priv.offset_v=0; Modified: mplayerxp/libvo/vo_opengl.cpp =================================================================== --- mplayerxp/libvo/vo_opengl.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_opengl.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -139,7 +139,7 @@ /* connect to server, create and map window, * allocate colors and (shared) memory */ -static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) +static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, const char *title, uint32_t format) { ogl_priv_t& priv = *static_cast<ogl_priv_t*>(vo->priv); GLX_System& glx = *priv.glx; @@ -154,13 +154,11 @@ priv.image_width = width; priv.image_format=format; - if ( vo_FS(vo) ) { vo->dest.w=d_width; vo->dest.h=d_height; } - priv.num_buffers=vo_conf.xp_buffs; aspect_save_screenres(vo_conf.screenwidth,vo_conf.screenheight); aspect(&d_width,&d_height,vo_ZOOM(vo)?A_ZOOM:A_NOZOOM); - glx.calcpos(vo,&hint,d_width,d_height,flags); + glx.calcpos(&hint,d_width,d_height,vo->flags); hint.flags = PPosition | PSize; priv.dwidth=d_width; priv.dheight=d_height; //XXX: what are the copy vars used for? @@ -215,8 +213,10 @@ { ogl_priv_t& priv = *static_cast<ogl_priv_t*>(vo->priv); GLX_System& glx = *priv.glx; - int e=glx.check_events(vo,adjust_size); - if(e&VO_EVENT_RESIZE) resize(vo,vo->dest.w,vo->dest.h); + int e=glx.check_events(adjust_size,vo); + vo_rect_t r; + glx.get_win_coord(&r); + if(e&VO_EVENT_RESIZE) resize(vo,r.w,r.h); return e|VO_EVENT_FORCE_UPDATE; } @@ -312,12 +312,15 @@ static MPXP_Rc control_vo(vo_data_t*vo,uint32_t request, any_t*data) { ogl_priv_t& priv = *static_cast<ogl_priv_t*>(vo->priv); + GLX_System& glx = *priv.glx; switch (request) { case VOCTRL_QUERY_FORMAT: return query_format((vo_query_fourcc_t*)data); case VOCTRL_FULLSCREEN: vo_fullscreen(vo); - resize(vo,vo->dest.w, vo->dest.h); + vo_rect_t r; + glx.get_win_coord(&r); + resize(vo,r.w,r.h); return MPXP_True; case VOCTRL_GET_NUM_FRAMES: *(uint32_t *)data = priv.num_buffers; Modified: mplayerxp/libvo/vo_sdl.cpp =================================================================== --- mplayerxp/libvo/vo_sdl.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_sdl.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -536,7 +536,7 @@ * returns : non-zero on success, zero on error. **/ -static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) +static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, const char *title, uint32_t format) //static int sdl_setup (int width, int height) { sdl_priv_t& priv = *static_cast<sdl_priv_t*>(vo->priv); @@ -647,7 +647,7 @@ } if(priv.X) { aspect_save_screenres(priv.XWidth,priv.XHeight); - aspect(&priv.dstwidth,&priv.dstheight,flags&VOFLAG_SWSCALE?A_ZOOM:A_NOZOOM); + aspect(&priv.dstwidth,&priv.dstheight,vo->flags&VOFLAG_SWSCALE?A_ZOOM:A_NOZOOM); } priv.windowsize.w = priv.dstwidth; priv.windowsize.h = priv.dstheight; @@ -657,21 +657,21 @@ * bit 2 (0x04) enables software scaling (-zoom) * bit 3 (0x08) enables flipping (-flip) */ - if(flags&FLIP) { + if(vo->flags&FLIP) { MSG_V("SDL: using flipped video (only with RGB/BGR/packed YUV)\n"); priv.flip = 1; } - if(flags&FS) { + if(vo->flags&FS) { MSG_V("SDL: setting zoomed fullscreen without modeswitching\n"); MSG_V("SDL: Info - please use -vm or -zoom to switch to best resolution.\n"); priv.fulltype = FS; retval = set_fullmode(vo,priv.fullmode); if(retval!=MPXP_Ok) return retval; - } else if(flags&VM) { + } else if(vo->flags&VM) { MSG_V("SDL: setting zoomed fullscreen with modeswitching\n"); priv.fulltype = VM; set_fullmode(vo,priv.fullmode); - } else if(flags&ZOOM) { + } else if(vo->flags&ZOOM) { MSG_V("SDL: setting zoomed fullscreen with modeswitching\n"); priv.fulltype = ZOOM; retval = set_fullmode(vo,priv.fullmode); Modified: mplayerxp/libvo/vo_vesa.cpp =================================================================== --- mplayerxp/libvo/vo_vesa.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_vesa.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -406,7 +406,7 @@ * bit 2 (0x04) enables software scaling (-zoom) * bit 3 (0x08) enables flipping (-flip) (NK: and for what?) */ -static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) +static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, const char *title, uint32_t format) { vesa_priv_t& priv = *static_cast<vesa_priv_t*>(vo->priv); struct VbeInfoBlock vib; @@ -425,11 +425,11 @@ return MPXP_False; } if(priv.subdev_flags == 0xFFFFFFFFUL) return MPXP_False; - if(flags & 0x8) { + if(vo->flags & 0x8) { MSG_WARN("vo_vesa: switch -flip is not supported\n"); } - if(flags & 0x04) use_scaler = 1; - if(flags & 0x01) { + if(vo->flags & 0x04) use_scaler = 1; + if(vo->flags & 0x01) { if(use_scaler) use_scaler = 2; else fs_mode = 1; } Modified: mplayerxp/libvo/vo_x11.cpp =================================================================== --- mplayerxp/libvo/vo_x11.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_x11.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -180,13 +180,15 @@ { x11_priv_t& priv = *static_cast<x11_priv_t*>(vo->priv); X11_System& x11 = *priv.x11; - uint32_t ret = x11.check_events(vo,adjust_size); + uint32_t ret = x11.check_events(adjust_size,vo); /* clear the old window */ if (ret & VO_EVENT_RESIZE) { unsigned idx; - unsigned newW= vo->dest.w; - unsigned newH= vo->dest.h; + vo_rect_t r; + x11.get_win_coord(&r); + unsigned newW= r.w; + unsigned newH= r.h; int newAspect= (newW*(1<<16) + (newH>>1))/newH; if(newAspect>priv.baseAspect) newW= (newH*priv.baseAspect + (1<<15))>>16; else newH= ((newW<<16) + (priv.baseAspect>>1)) /priv.baseAspect; @@ -208,7 +210,7 @@ return ret; } -static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width,uint32_t height,uint32_t d_width,uint32_t d_height,uint32_t flags,char *title,uint32_t format) +static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width,uint32_t height,uint32_t d_width,uint32_t d_height,const char *title,uint32_t format) { x11_priv_t& priv = *static_cast<x11_priv_t*>(vo->priv); X11_System& x11 = *priv.x11; @@ -236,10 +238,8 @@ aspect(&d_width,&d_height,vo_FS(vo)?A_ZOOM:A_NOZOOM); - x11.calcpos(vo,&hint,d_width,d_height,flags); + x11.calcpos(&hint,d_width,d_height,vo->flags); hint.flags=PPosition | PSize; - vo->dest.w=hint.width; - vo->dest.h=hint.height; priv.image_width=d_width; priv.image_height=d_height; @@ -339,9 +339,10 @@ x11_priv_t& priv = *static_cast<x11_priv_t*>(vo->priv); X11_System& x11 = *priv.x11; vo_rect_t r; + x11.get_win_coord(&r); r.x=r.y=0; - r.w=(vo->dest.w-myximage->width)/2; - r.h=(vo->dest.h-myximage->height)/2; + r.w=(r.w-myximage->width)/2; + r.h=(r.h-myximage->height)/2; x11.put_image(myximage,r); } @@ -422,7 +423,8 @@ return MPXP_True; } case VOCTRL_FULLSCREEN: - x11.fullscreen(vo); + if(x11.fullscreen()) vo_FS_SET(vo); + else vo_FS_UNSET(vo); #ifdef CONFIG_VIDIX if(priv.vidix_name) resize_vidix(vo); #endif Modified: mplayerxp/libvo/vo_xv.cpp =================================================================== --- mplayerxp/libvo/vo_xv.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/vo_xv.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -116,7 +116,7 @@ * connect to server, create and map window, * allocate colors and (shared) memory */ -static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) +static MPXP_Rc __FASTCALL__ config_vo(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,const char *title, uint32_t format) { xv_priv_t& priv = *static_cast<xv_priv_t*>(vo->priv); Xv_System& xv = *priv.xv; @@ -133,8 +133,6 @@ priv.image_width = width; priv.image_format=format; - if ( vo_FS(vo) ) { vo->dest.w=d_width; vo->dest.h=d_height; } - priv.num_buffers=vo_conf.xp_buffs; priv.depth=xv.depth(); @@ -145,7 +143,7 @@ aspect_save_screenres(vo_conf.screenwidth,vo_conf.screenheight); aspect(&d_width,&d_height,vo_ZOOM(vo)?A_ZOOM:A_NOZOOM); - xv.calcpos(vo,&hint,d_width,d_height,flags); + xv.calcpos(&hint,d_width,d_height,vo->flags); hint.flags = PPosition | PSize; priv.dwidth=d_width; priv.dheight=d_height; //XXX: what are the copy vars used for? @@ -229,7 +227,7 @@ { xv_priv_t& priv = *static_cast<xv_priv_t*>(vo->priv); Xv_System& xv = *priv.xv; - uint32_t e=xv.check_events(vo,adjust_size); + uint32_t e=xv.check_events(adjust_size,vo); if(e&VO_EVENT_RESIZE) { vo_rect_t winc; xv.get_win_coord(&winc); @@ -350,7 +348,8 @@ case VOCTRL_QUERY_FORMAT: return query_format(vo,(vo_query_fourcc_t*)data); case VOCTRL_FULLSCREEN: - xv.fullscreen(vo); + if(xv.fullscreen()) vo_FS_SET(vo); + else vo_FS_UNSET(vo); return MPXP_True; case VOCTRL_CHECK_EVENTS: { Modified: mplayerxp/libvo/x11_system.cpp =================================================================== --- mplayerxp/libvo/x11_system.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/x11_system.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -235,6 +235,7 @@ ::XSetInputFocus(mDisplay, window, RevertToNone, CurrentTime); } #endif + get_win_coord(&curr); } void X11_System::select_input(long mask) const @@ -658,7 +659,7 @@ else return "Unknown"; } -uint32_t X11_System::check_events(vo_data_t*vo,vo_adjust_size_t adjust_size) const +uint32_t X11_System::check_events(vo_adjust_size_t adjust_size,vo_data_t*opaque) { uint32_t ret=0; XEvent Event; @@ -677,11 +678,11 @@ case ConfigureNotify: nw = Event.xconfigure.width; nh = Event.xconfigure.height; - if(adjust_size) adj_ret = (*adjust_size)(vo,vo->dest.w,vo->dest.h,&nw,&nh); - ow = vo->dest.w; - oh = vo->dest.h; - vo->dest.w=nw; - vo->dest.h=nh; + if(adjust_size) adj_ret = (*adjust_size)(opaque,curr.w,curr.h,&nw,&nh); + ow = curr.w; + oh = curr.h; + curr.w=nw; + curr.h=nh; Window root; int ifoo; unsigned foo; @@ -689,13 +690,13 @@ ::XGetGeometry(mDisplay, window, &root, &ifoo, &ifoo, &foo/*width*/, &foo/*height*/, &foo, &foo); ::XTranslateCoordinates(mDisplay, window, root, 0, 0, - reinterpret_cast<int*>(&vo->dest.x), - reinterpret_cast<int*>(&vo->dest.y), &win); - if(adjust_size && ow != vo->dest.w && oh != vo->dest.h && adj_ret) { - ::XResizeWindow( mDisplay,window,vo->dest.w,vo->dest.h ); + reinterpret_cast<int*>(&curr.x), + reinterpret_cast<int*>(&curr.y), &win); + if(adjust_size && ow != curr.w && oh != curr.h && adj_ret) { + ::XResizeWindow( mDisplay,window,curr.w,curr.h ); ::XSync( mDisplay,True); } - MSG_V("X11 Window %dx%d-%dx%d\n", vo->dest.x, vo->dest.y, vo->dest.w, vo->dest.h); + MSG_V("X11 Window %dx%d-%dx%d\n", curr.x, curr.y, curr.w, curr.h); ret|=VO_EVENT_RESIZE; break; case KeyPress: { @@ -737,9 +738,8 @@ ::XSetWMNormalHints( mDisplay,window,&hint ); } -void X11_System::calcpos(const vo_data_t*vo,XSizeHints* hint, unsigned d_width, unsigned d_height, unsigned flags ) +void X11_System::calcpos(XSizeHints* hint, unsigned d_width, unsigned d_height, unsigned flags) { - UNUSED(flags); #ifdef HAVE_XF86VM int modeline_width, modeline_height; static uint32_t vm_width; @@ -750,7 +750,7 @@ hint->width=d_width; hint->height=d_height; #ifdef HAVE_XF86VM - if ( vo_VM(vo) ) { + if ( flags & VOFLAG_MODESWITCHING ) { vm_width=d_width; vm_height=d_height; vm_switch(vm_width, vm_height,&modeline_width, &modeline_height); hint->x=(vo_conf.screenwidth-modeline_width)/2; @@ -760,7 +760,7 @@ } else #endif - if ( vo_FS(vo) ) { + if ( flags & VOFLAG_FULLSCREEN ) { hint->width=vo_conf.screenwidth; hint->height=vo_conf.screenheight; hint->x=0; @@ -768,23 +768,23 @@ } } -void X11_System::fullscreen(vo_data_t*vo) +int X11_System::fullscreen() { + int is_fs=(curr.w==vo_conf.screenwidth && curr.h==vo_conf.screenheight); ::XUnmapWindow( mDisplay,window ); - if ( !vo_FS(vo) ) { - vo_FS_SET(vo); - prev=vo->dest; - vo->dest.x=0; vo->dest.y=0; vo->dest.w=vo_conf.screenwidth; vo->dest.h=vo_conf.screenheight; + if ( !is_fs ) { + prev=curr; + curr.x=0; curr.y=0; curr.w=vo_conf.screenwidth; curr.h=vo_conf.screenheight; decoration(0); } else { - vo_FS_UNSET(vo); - vo->dest=prev; + curr=prev; decoration(1); } - sizehint(vo->dest.x,vo->dest.y,vo->dest.w,vo->dest.h ); - ::XMoveResizeWindow( mDisplay,window,vo->dest.x,vo->dest.y,vo->dest.w,vo->dest.h ); + sizehint(curr.x,curr.y,curr.w,curr.h ); + ::XMoveResizeWindow( mDisplay,window,curr.x,curr.y,curr.w,curr.h ); ::XMapWindow( mDisplay,window ); ::XSync( mDisplay,False ); + return !is_fs; } void X11_System::saver_on() @@ -1213,6 +1213,7 @@ ::XSetInputFocus(get_display(), window, RevertToNone, CurrentTime); } #endif + get_win_coord(&curr); } #endif Modified: mplayerxp/libvo/x11_system.h =================================================================== --- mplayerxp/libvo/x11_system.h 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/libvo/x11_system.h 2012-11-26 09:03:57 UTC (rev 456) @@ -55,9 +55,9 @@ void decoration(int d); void classhint(const char *name) const; void sizehint(int x, int y, int width, int height) const; - void calcpos(const vo_data_t* vo,XSizeHints* hint, unsigned d_width, unsigned d_height, unsigned flags); - uint32_t check_events(vo_data_t* vo,vo_adjust_size_t adjust_size) const; - void fullscreen(vo_data_t* vo); + void calcpos(XSizeHints* hint, unsigned d_width, unsigned d_height, unsigned flags); + uint32_t check_events(vo_adjust_size_t adjust_size,vo_data_t* opaque); + int fullscreen(); void saver_off(); void saver_on(); @@ -74,6 +74,7 @@ ::GC get_gc() const {return gc; } ::Window window; + vo_rect_t prev,curr; #ifdef HAVE_SHM ::XShmSegmentInfo Shminfo[MAX_DRI_BUFFERS]; int gXErrorFlag; @@ -91,7 +92,6 @@ int dpms_disabled; int timeout_save; - vo_rect_t prev; int _Shmem_Flag; ::XImage* myximage[MAX_DRI_BUFFERS]; Modified: mplayerxp/osdep/vbelib.cpp =================================================================== --- mplayerxp/osdep/vbelib.cpp 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/osdep/vbelib.cpp 2012-11-26 09:03:57 UTC (rev 456) @@ -219,7 +219,7 @@ return ffff_found; } -static void print_str(unsigned char *str) +static void print_str(const char *str) { size_t i; fflush(stdout); @@ -259,7 +259,7 @@ fpdata.off = (unsigned long)(data->OemStringPtr) & 0xffff; data->OemStringPtr = (char*)PhysToVirt(fpdata); if(!check_str(reinterpret_cast<unsigned char*>(data->OemStringPtr))) data->OemStringPtr = NULL; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR if(mp_conf.verbose > 1) { MSG_DBG2("vbelib: OemStringPtr=%04X:%04X => %p\n",fpdata.seg,fpdata.off,data->OemStringPtr); @@ -275,7 +275,7 @@ data->VideoModePtr = NULL; retval = VBE_BROKEN_BIOS; } -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR if(mp_conf.verbose > 1) { MSG_DBG2("vbelib: VideoModePtr=%04X:%04X => %p\n",fpdata.seg,fpdata.off,data->VideoModePtr); @@ -287,7 +287,7 @@ fpdata.off = (unsigned long)(data->OemVendorNamePtr) & 0xffff; data->OemVendorNamePtr = (char *)PhysToVirt(fpdata); if(!check_str(reinterpret_cast<unsigned char*>(data->OemVendorNamePtr))) data->OemVendorNamePtr = NULL; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR if(mp_conf.verbose > 1) { MSG_DBG2("vbelib: OemVendorNamePtr=%04X:%04X => %p\n",fpdata.seg,fpdata.off,data->OemVendorNamePtr); @@ -299,7 +299,7 @@ fpdata.off = (unsigned long)(data->OemProductNamePtr) & 0xffff; data->OemProductNamePtr = (char*)PhysToVirt(fpdata); if(!check_str(reinterpret_cast<unsigned char*>(data->OemProductNamePtr))) data->OemProductNamePtr = NULL; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR if(mp_conf.verbose > 1) { MSG_DBG2("vbelib: OemProductNamePtr=%04X:%04X => %p\n",fpdata.seg,fpdata.off,data->OemProductNamePtr); @@ -311,7 +311,7 @@ fpdata.off = (unsigned long)(data->OemProductRevPtr) & 0xffff; data->OemProductRevPtr = (char*)PhysToVirt(fpdata); if(!check_str(reinterpret_cast<unsigned char*>(data->OemProductRevPtr))) data->OemProductRevPtr = NULL; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR if(mp_conf.verbose > 1) { MSG_DBG2("vbelib: OemProductRevPtr=%04X:%04X => %p\n",fpdata.seg,fpdata.off,data->OemProductRevPtr); @@ -655,17 +655,17 @@ rm_info = (realVesaProtModeInterface*)PhysToVirtSO(r.es,info_offset); pm_info->SetWindowCall = (void (*)())PhysToVirtSO(r.es,info_offset+rm_info->SetWindowCall); if(!is_addr_valid(reinterpret_cast<any_t*>(pm_info->SetWindowCall))) retval = VBE_BROKEN_BIOS; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR MSG_DBG2("vbelib: SetWindowCall=%04X:%04X => %p\n",r.es,info_offset+rm_info->SetWindowCall,pm_info->SetWindowCall); #endif pm_info->SetDisplayStart = (void(*)())PhysToVirtSO(r.es,info_offset+rm_info->SetDisplayStart); if(!is_addr_valid(reinterpret_cast<any_t*>(pm_info->SetDisplayStart))) retval = VBE_BROKEN_BIOS; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR MSG_DBG2("vbelib: SetDisplayStart=%04X:%04X => %p\n",r.es,info_offset+rm_info->SetDisplayStart,pm_info->SetDisplayStart); #endif pm_info->SetPaletteData = (void(*)())PhysToVirtSO(r.es,info_offset+rm_info->SetPaletteData); if(!is_addr_valid(reinterpret_cast<any_t*>(pm_info->SetPaletteData))) retval = VBE_BROKEN_BIOS; -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR MSG_DBG2("vbelib: SetPaletteData=%04X:%04X => %p\n",r.es,info_offset+rm_info->SetPaletteData,pm_info->SetPaletteData); #endif pm_info->iopl_ports = (unsigned short*)PhysToVirtSO(r.es,info_offset+rm_info->iopl_ports); @@ -676,7 +676,7 @@ pm_info->iopl_ports = NULL; /* retval = VBE_BROKEN_BIOS; <- It's for broken BIOSes only */ } -#ifdef HAVE_mp_conf.verbose_VAR +#ifdef HAVE_VERBOSE_VAR if(mp_conf.verbose > 1) { MSG_DBG2("vbelib: iopl_ports=%04X:%04X => %p\n",r.es,info_offset+rm_info->iopl_ports,pm_info->iopl_ports); @@ -688,7 +688,7 @@ return retval; } /* --------- Standard VGA stuff -------------- */ -int vbeWriteString(int x, int y, int attr, char *str) +int vbeWriteString(int x, int y, int attr,const char *str) { struct LRMI_regs r; any_t*rm_space = NULL; Modified: mplayerxp/osdep/vbelib.h =================================================================== --- mplayerxp/osdep/vbelib.h 2012-11-26 08:01:09 UTC (rev 455) +++ mplayerxp/osdep/vbelib.h 2012-11-26 09:03:57 UTC (rev 456) @@ -219,7 +219,7 @@ int vbeGetProtModeInfo(struct VesaProtModeInterface *); /* Standard VGA stuff */ - int vbeWriteString(int x, int y, int attr, char *str); + int vbeWriteString(int x, int y, int attr,const char *str); /* Misc stuff (For portability only) */ any_t* vbeMapVideoBuffer(unsigned long phys_addr,unsigned long size); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-27 15:55:44
|
Revision: 465 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=465&view=rev Author: nickols_k Date: 2012-11-27 15:55:31 +0000 (Tue, 27 Nov 2012) Log Message: ----------- clarity: rename osd.* ->osd_render.* Modified Paths: -------------- mplayerxp/libvo/Makefile mplayerxp/libvo/sub.cpp mplayerxp/libvo/sub.h mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out_internal.h mplayerxp/libvo/vidix_system.cpp mplayerxp/libvo/vo_fbdev.cpp mplayerxp/postproc/libmenu/menu.cpp mplayerxp/postproc/vf_expand.cpp mplayerxp/postproc/vf_panscan.cpp Added Paths: ----------- mplayerxp/libvo/osd_render.cpp mplayerxp/libvo/osd_render.h mplayerxp/libvo/osd_render_template.h Removed Paths: ------------- mplayerxp/libvo/osd.cpp mplayerxp/libvo/osd.h mplayerxp/libvo/osd_template.h Modified: mplayerxp/libvo/Makefile =================================================================== --- mplayerxp/libvo/Makefile 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/Makefile 2012-11-27 15:55:31 UTC (rev 465) @@ -2,8 +2,8 @@ LIBNAME = libvo.a -CXXSRCS=video_out.cpp font_load.cpp img_format.cpp screenshot.cpp sub.cpp osd.cpp -CXXSRCS+=aspect.cpp vo_null.cpp +CXXSRCS=video_out.cpp font_load.cpp img_format.cpp screenshot.cpp sub.cpp +CXXSRCS+=osd_render.cpp aspect.cpp vo_null.cpp ifeq ($(HAVE_SDL),yes) CXXSRCS+=vo_sdl.cpp endif Deleted: mplayerxp/libvo/osd.cpp =================================================================== --- mplayerxp/libvo/osd.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/osd.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -1,261 +0,0 @@ -#include "mp_config.h" -#include "osdep/mplib.h" -using namespace mpxp; -/* - Generic alpha renderers for all YUV modes and RGB depths. - These are "reference implementations", should be optimized later (MMX, etc) - Templating Code from Michael Niedermayer (mic...@gm...) is under GPL -*/ - -#include <stdio.h> -#include <pthread.h> - -#include <inttypes.h> -#include "osdep/cpudetect.h" -#include "osdep/mangle.h" -#include "mplayerxp.h" -#include "osd.h" -#include "vo_msg.h" - -#if defined(__MMX__) -static const uint64_t bFF __attribute__((used)) __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; -static const unsigned long long mask24lh __attribute__((used)) __attribute__((aligned(8))) = 0xFFFF000000000000ULL; -static const unsigned long long mask24hl __attribute__((used)) __attribute__((aligned(8))) = 0x0000FFFFFFFFFFFFULL; -#endif - -#define PVECTOR_ACCEL_H "osd_template.h" -#include "pvector/pvector_inc.h" - -#ifdef FAST_OSD_TABLE -static unsigned short fast_osd_15bpp_table[256]; -static unsigned short fast_osd_16bpp_table[256]; -#endif - -static void __FASTCALL__ vo_draw_alpha_rgb15_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; - for(y=0;y<h;y++){ - register unsigned short *dst = (unsigned short*) dstbase; - register int x; - for(x=0;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD -#ifdef FAST_OSD_TABLE - dst[x]=fast_osd_15bpp_table[src[x]]; -#else - register unsigned int a=src[x]>>3; - dst[x]=(a<<10)|(a<<5)|a; -#endif -#else - unsigned char r=dst[x]&0x1F; - unsigned char g=(dst[x]>>5)&0x1F; - unsigned char b=(dst[x]>>10)&0x1F; - r=(((r*srca[x])>>5)+src[x])>>3; - g=(((g*srca[x])>>5)+src[x])>>3; - b=(((b*srca[x])>>5)+src[x])>>3; - dst[x]=(b<<10)|(g<<5)|r; -#endif - } - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } - return; -} - -static void __FASTCALL__ vo_draw_alpha_rgb16_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; - for(y=0;y<h;y++){ - register unsigned short *dst = (unsigned short*) dstbase; - register int x; - for(x=0;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD -#ifdef FAST_OSD_TABLE - dst[x]=fast_osd_16bpp_table[src[x]]; -#else - dst[x]=((src[x]>>3)<<11)|((src[x]>>2)<<5)|(src[x]>>3); -#endif -#else - unsigned char r=dst[x]&0x1F; - unsigned char g=(dst[x]>>5)&0x3F; - unsigned char b=(dst[x]>>11)&0x1F; - r=(((r*srca[x])>>5)+src[x])>>3; - g=(((g*srca[x])>>6)+src[x])>>2; - b=(((b*srca[x])>>5)+src[x])>>3; - dst[x]=(b<<11)|(g<<5)|r; -#endif - } - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } - return; -} - -static void __FASTCALL__ vo_draw_alpha_uyvy_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - vo_draw_alpha_yuy2_c(w,h,src,srca,srcstride,dstbase+1,dststride,finalize); -} - -static void __FASTCALL__ vo_draw_alpha_null(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - UNUSED(w); - UNUSED(h); - UNUSED(src); - UNUSED(srca); - UNUSED(srcstride); - UNUSED(dstbase); - UNUSED(dststride); - UNUSED(finalize); -} - -void OSD_Render::render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize) -{ - (*draw_alpha_ptr)(w,h,src,srca,srcstride,dstbase,dststride,finalize); -} - -void OSD_Render::get_draw_alpha(unsigned fmt) { - MSG_DBG2("get_draw_alpha(%s)\n",vo_format_name(fmt)); - switch(fmt) { - case IMGFMT_BGR15: - case IMGFMT_RGB15: - draw_alpha_ptr=draw_alpha_rgb15_ptr; - break; - case IMGFMT_BGR16: - case IMGFMT_RGB16: - draw_alpha_ptr=draw_alpha_rgb16_ptr; - break; - case IMGFMT_BGR24: - case IMGFMT_RGB24: - draw_alpha_ptr=draw_alpha_rgb24_ptr; - break; - case IMGFMT_BGR32: - case IMGFMT_RGB32: - draw_alpha_ptr=draw_alpha_rgb32_ptr; - break; - case IMGFMT_YV12: - case IMGFMT_I420: - case IMGFMT_IYUV: - case IMGFMT_YVU9: - case IMGFMT_IF09: - case IMGFMT_Y800: - case IMGFMT_Y8: - draw_alpha_ptr=draw_alpha_yv12_ptr; - break; - case IMGFMT_YUY2: - draw_alpha_ptr=draw_alpha_yuy2_ptr; - break; - case IMGFMT_UYVY: - draw_alpha_ptr=draw_alpha_uyvy_ptr; - break; - default: - MSG_ERR("draw alpha for %s fourcc not implemented yet!",vo_format_name(fmt)); - draw_alpha_ptr=vo_draw_alpha_null; - break; - } -} - -OSD_Render::OSD_Render(unsigned fourcc) -{ -#ifdef FAST_OSD_TABLE - int i; - for(i=0;i<256;i++){ - fast_osd_15bpp_table[i]=((i>>3)<<10)|((i>>3)<<5)|(i>>3); - fast_osd_16bpp_table[i]=((i>>3)<<11)|((i>>2)<<5)|(i>>3); - } -#endif -/*FIXME the optimized stuff is a lie for 15/16bpp as they arent optimized yet*/ -// ordered per speed fasterst first -#ifdef __AVX__ -if(gCpuCaps.hasSSE41) -{ - MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_AVX; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_AVX; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_AVX; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_AVX; -} -else -#endif -#ifdef __SSE4_1__ -if(gCpuCaps.hasSSE41) -{ - MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE4; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE4; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE4; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE4; -} -else -#endif -#ifdef __SSSE3__ -if(gCpuCaps.hasSSSE3) -{ - MSG_V("Using SSSE3 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSSE3; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSSE3; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSSE3; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSSE3; -} -else -#endif -#ifdef __SSE3__ -if(gCpuCaps.hasSSE3) -{ - MSG_V("Using SSE3 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE3; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE3; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE3; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE3; -} -else -#endif -#ifdef __SSE2__ -if(gCpuCaps.hasSSE2) -{ - MSG_V("Using SSE2 Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE2; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE2; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE2; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE2; -} -else -#endif -#ifndef __x86_64__ -#ifdef __SSE__ -if(gCpuCaps.hasMMX2) -{ - MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE; -} -else -#endif -//#ifdef __MMX__ -//if(gCpuCaps.hasMMX) -//{ -// MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); -// draw_alpha_yv12_ptr=vo_draw_alpha_yv12_MMX; -// draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_MMX; -// draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_MMX; -// draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_MMX; -//} -//else -//#endif -#endif -{ - MSG_V("Using generic OnScreenDisplay\n"); - draw_alpha_yv12_ptr=vo_draw_alpha_yv12_c; - draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_c; - draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_c; - draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_c; -} - draw_alpha_uyvy_ptr=vo_draw_alpha_uyvy_c; - draw_alpha_rgb15_ptr=vo_draw_alpha_rgb15_c; - draw_alpha_rgb16_ptr=vo_draw_alpha_rgb16_c; - get_draw_alpha(fourcc); -} - -OSD_Render::~OSD_Render(){} Deleted: mplayerxp/libvo/osd.h =================================================================== --- mplayerxp/libvo/osd.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/osd.h 2012-11-27 15:55:31 UTC (rev 465) @@ -1,25 +0,0 @@ -#ifndef __MPLAYER_OSD_H -#define __MPLAYER_OSD_H - -/* Generic alpha renderers for all YUV modes and RGB depths. */ -/* These are "reference implementations", should be optimized later (MMX, etc) */ -class OSD_Render : public Opaque { - public: - OSD_Render(unsigned fourcc); - virtual ~OSD_Render(); - - void render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); - private: - void get_draw_alpha(unsigned fmt); - typedef void (* __FASTCALL__ draw_alpha_f)(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); - draw_alpha_f draw_alpha_ptr; - draw_alpha_f draw_alpha_yv12_ptr; - draw_alpha_f draw_alpha_yuy2_ptr; - draw_alpha_f draw_alpha_uyvy_ptr; - draw_alpha_f draw_alpha_rgb24_ptr; - draw_alpha_f draw_alpha_rgb32_ptr; - draw_alpha_f draw_alpha_rgb15_ptr; - draw_alpha_f draw_alpha_rgb16_ptr; -}; - -#endif Copied: mplayerxp/libvo/osd_render.cpp (from rev 464, mplayerxp/libvo/osd.cpp) =================================================================== --- mplayerxp/libvo/osd_render.cpp (rev 0) +++ mplayerxp/libvo/osd_render.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -0,0 +1,261 @@ +#include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; +/* + Generic alpha renderers for all YUV modes and RGB depths. + These are "reference implementations", should be optimized later (MMX, etc) + Templating Code from Michael Niedermayer (mic...@gm...) is under GPL +*/ + +#include <stdio.h> +#include <pthread.h> + +#include <inttypes.h> +#include "osdep/cpudetect.h" +#include "osdep/mangle.h" +#include "mplayerxp.h" +#include "osd_render.h" +#include "vo_msg.h" + +#if defined(__MMX__) +static const uint64_t bFF __attribute__((used)) __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; +static const unsigned long long mask24lh __attribute__((used)) __attribute__((aligned(8))) = 0xFFFF000000000000ULL; +static const unsigned long long mask24hl __attribute__((used)) __attribute__((aligned(8))) = 0x0000FFFFFFFFFFFFULL; +#endif + +#define PVECTOR_ACCEL_H "osd_render_template.h" +#include "pvector/pvector_inc.h" + +#ifdef FAST_OSD_TABLE +static unsigned short fast_osd_15bpp_table[256]; +static unsigned short fast_osd_16bpp_table[256]; +#endif + +static void __FASTCALL__ vo_draw_alpha_rgb15_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; + for(y=0;y<h;y++){ + register unsigned short *dst = (unsigned short*) dstbase; + register int x; + for(x=0;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD +#ifdef FAST_OSD_TABLE + dst[x]=fast_osd_15bpp_table[src[x]]; +#else + register unsigned int a=src[x]>>3; + dst[x]=(a<<10)|(a<<5)|a; +#endif +#else + unsigned char r=dst[x]&0x1F; + unsigned char g=(dst[x]>>5)&0x1F; + unsigned char b=(dst[x]>>10)&0x1F; + r=(((r*srca[x])>>5)+src[x])>>3; + g=(((g*srca[x])>>5)+src[x])>>3; + b=(((b*srca[x])>>5)+src[x])>>3; + dst[x]=(b<<10)|(g<<5)|r; +#endif + } + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } + return; +} + +static void __FASTCALL__ vo_draw_alpha_rgb16_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; + for(y=0;y<h;y++){ + register unsigned short *dst = (unsigned short*) dstbase; + register int x; + for(x=0;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD +#ifdef FAST_OSD_TABLE + dst[x]=fast_osd_16bpp_table[src[x]]; +#else + dst[x]=((src[x]>>3)<<11)|((src[x]>>2)<<5)|(src[x]>>3); +#endif +#else + unsigned char r=dst[x]&0x1F; + unsigned char g=(dst[x]>>5)&0x3F; + unsigned char b=(dst[x]>>11)&0x1F; + r=(((r*srca[x])>>5)+src[x])>>3; + g=(((g*srca[x])>>6)+src[x])>>2; + b=(((b*srca[x])>>5)+src[x])>>3; + dst[x]=(b<<11)|(g<<5)|r; +#endif + } + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } + return; +} + +static void __FASTCALL__ vo_draw_alpha_uyvy_c(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + vo_draw_alpha_yuy2_c(w,h,src,srca,srcstride,dstbase+1,dststride,finalize); +} + +static void __FASTCALL__ vo_draw_alpha_null(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + UNUSED(w); + UNUSED(h); + UNUSED(src); + UNUSED(srca); + UNUSED(srcstride); + UNUSED(dstbase); + UNUSED(dststride); + UNUSED(finalize); +} + +void OSD_Render::render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize) +{ + (*draw_alpha_ptr)(w,h,src,srca,srcstride,dstbase,dststride,finalize); +} + +void OSD_Render::get_draw_alpha(unsigned fmt) { + MSG_DBG2("get_draw_alpha(%s)\n",vo_format_name(fmt)); + switch(fmt) { + case IMGFMT_BGR15: + case IMGFMT_RGB15: + draw_alpha_ptr=draw_alpha_rgb15_ptr; + break; + case IMGFMT_BGR16: + case IMGFMT_RGB16: + draw_alpha_ptr=draw_alpha_rgb16_ptr; + break; + case IMGFMT_BGR24: + case IMGFMT_RGB24: + draw_alpha_ptr=draw_alpha_rgb24_ptr; + break; + case IMGFMT_BGR32: + case IMGFMT_RGB32: + draw_alpha_ptr=draw_alpha_rgb32_ptr; + break; + case IMGFMT_YV12: + case IMGFMT_I420: + case IMGFMT_IYUV: + case IMGFMT_YVU9: + case IMGFMT_IF09: + case IMGFMT_Y800: + case IMGFMT_Y8: + draw_alpha_ptr=draw_alpha_yv12_ptr; + break; + case IMGFMT_YUY2: + draw_alpha_ptr=draw_alpha_yuy2_ptr; + break; + case IMGFMT_UYVY: + draw_alpha_ptr=draw_alpha_uyvy_ptr; + break; + default: + MSG_ERR("draw alpha for %s fourcc not implemented yet!",vo_format_name(fmt)); + draw_alpha_ptr=vo_draw_alpha_null; + break; + } +} + +OSD_Render::OSD_Render(unsigned fourcc) +{ +#ifdef FAST_OSD_TABLE + int i; + for(i=0;i<256;i++){ + fast_osd_15bpp_table[i]=((i>>3)<<10)|((i>>3)<<5)|(i>>3); + fast_osd_16bpp_table[i]=((i>>3)<<11)|((i>>2)<<5)|(i>>3); + } +#endif +/*FIXME the optimized stuff is a lie for 15/16bpp as they arent optimized yet*/ +// ordered per speed fasterst first +#ifdef __AVX__ +if(gCpuCaps.hasSSE41) +{ + MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_AVX; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_AVX; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_AVX; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_AVX; +} +else +#endif +#ifdef __SSE4_1__ +if(gCpuCaps.hasSSE41) +{ + MSG_V("Using SSE4 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE4; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE4; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE4; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE4; +} +else +#endif +#ifdef __SSSE3__ +if(gCpuCaps.hasSSSE3) +{ + MSG_V("Using SSSE3 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSSE3; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSSE3; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSSE3; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSSE3; +} +else +#endif +#ifdef __SSE3__ +if(gCpuCaps.hasSSE3) +{ + MSG_V("Using SSE3 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE3; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE3; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE3; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE3; +} +else +#endif +#ifdef __SSE2__ +if(gCpuCaps.hasSSE2) +{ + MSG_V("Using SSE2 Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE2; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE2; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE2; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE2; +} +else +#endif +#ifndef __x86_64__ +#ifdef __SSE__ +if(gCpuCaps.hasMMX2) +{ + MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_SSE; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_SSE; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_SSE; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_SSE; +} +else +#endif +//#ifdef __MMX__ +//if(gCpuCaps.hasMMX) +//{ +// MSG_V("Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n"); +// draw_alpha_yv12_ptr=vo_draw_alpha_yv12_MMX; +// draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_MMX; +// draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_MMX; +// draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_MMX; +//} +//else +//#endif +#endif +{ + MSG_V("Using generic OnScreenDisplay\n"); + draw_alpha_yv12_ptr=vo_draw_alpha_yv12_c; + draw_alpha_yuy2_ptr=vo_draw_alpha_yuy2_c; + draw_alpha_rgb24_ptr=vo_draw_alpha_rgb24_c; + draw_alpha_rgb32_ptr=vo_draw_alpha_rgb32_c; +} + draw_alpha_uyvy_ptr=vo_draw_alpha_uyvy_c; + draw_alpha_rgb15_ptr=vo_draw_alpha_rgb15_c; + draw_alpha_rgb16_ptr=vo_draw_alpha_rgb16_c; + get_draw_alpha(fourcc); +} + +OSD_Render::~OSD_Render(){} Copied: mplayerxp/libvo/osd_render.h (from rev 464, mplayerxp/libvo/osd.h) =================================================================== --- mplayerxp/libvo/osd_render.h (rev 0) +++ mplayerxp/libvo/osd_render.h 2012-11-27 15:55:31 UTC (rev 465) @@ -0,0 +1,25 @@ +#ifndef __MPLAYER_OSD_RENDER_H_INCLUDED +#define __MPLAYER_OSD_RENDER_H_INCLUDED 1 + +/* Generic alpha renderers for all YUV modes and RGB depths. */ +/* These are "reference implementations", should be optimized later (MMX, etc) */ +class OSD_Render : public Opaque { + public: + OSD_Render(unsigned fourcc); + virtual ~OSD_Render(); + + void render(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); + private: + void get_draw_alpha(unsigned fmt); + typedef void (* __FASTCALL__ draw_alpha_f)(int w,int h, const unsigned char* src, const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize); + draw_alpha_f draw_alpha_ptr; + draw_alpha_f draw_alpha_yv12_ptr; + draw_alpha_f draw_alpha_yuy2_ptr; + draw_alpha_f draw_alpha_uyvy_ptr; + draw_alpha_f draw_alpha_rgb24_ptr; + draw_alpha_f draw_alpha_rgb32_ptr; + draw_alpha_f draw_alpha_rgb15_ptr; + draw_alpha_f draw_alpha_rgb16_ptr; +}; + +#endif Copied: mplayerxp/libvo/osd_render_template.h (from rev 463, mplayerxp/libvo/osd_template.h) =================================================================== --- mplayerxp/libvo/osd_render_template.h (rev 0) +++ mplayerxp/libvo/osd_render_template.h 2012-11-27 15:55:31 UTC (rev 465) @@ -0,0 +1,318 @@ +// Generic alpha renderers for all YUV modes and RGB depths. +// Optimized by Nick and Michael +// Code from Michael Niedermayer (mic...@gm...) is under GPL +#include "pvector/pvector.h" + +#ifdef HAVE_INT_PVECTOR +static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_load)(const any_t*__P) +{ + return *(const __m64 *)__P; +} +#undef _m_load +#define _m_load PVECTOR_RENAME(_m_load) + +static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_load_half)(const any_t*__P) +{ + return _mm_cvtsi32_si64 (*(const int *)__P); +} +#undef _m_load_half +#define _m_load_half PVECTOR_RENAME(_m_load_half) + +static __inline void __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_store)(any_t*__P, __m64 src) +{ + *(__m64 *)__P = src; +} +#undef _m_store +#define _m_store PVECTOR_RENAME(_m_store) + +static __inline void __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_store_half)(any_t*__P, __m64 src) +{ + *(int *)__P = _mm_cvtsi64_si32(src); +} +#undef _m_store_half +#define _m_store_half PVECTOR_RENAME(_m_store_half) + +static __inline void __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(_m_movntq)(any_t*__P, __m64 src) +{ +#ifdef HAVE_MMX2 + _mm_stream_pi(__P,src); +#else + _m_store(__P,src); +#endif +} +#undef _m_movntq +#define _m_movntq PVECTOR_RENAME(_m_movntq) + +#endif + +static inline void PVECTOR_RENAME(vo_draw_alpha_yv12)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + unsigned y; +#ifdef HAVE_INT_PVECTOR + __ivec vzero = _ivec_setzero(); +#endif +PROFILE_START(); + for(y=0;y<(unsigned)h;y++){ + int x; + x=0; +#ifdef HAVE_INT_PVECTOR + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + /* MOVNTDQ: #GP(0) - If memory operand is not aligned on a 16-byte boundary */ + if(!_ivec_aligned(dstbase)) + for(;x<w;x++){ + unsigned char *dst=&dstbase[x]; + if(srca[x]) *dst=((dstbase[x]*srca[x])>>8)+src[x]; + if(_ivec_aligned(dst)) break; /* align on sizeof(MMREG) boundary */ + } + if((w-x)>=_ivec_size()) + for(;x<w;x+=_ivec_size()){ + __ivec vmsk,vdest,vsrc,vsrca,vt[4]; + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + vdest = _ivec_loada(&dstbase[x]); + if(_ivec_aligned(&src[x])) + vsrc = _ivec_loada(&src[x]); + else + vsrc = _ivec_loadu(&src[x]); + if(_ivec_aligned(&srca[x])) + vsrca = _ivec_loada(&srca[x]); + else + vsrca = _ivec_loadu(&srca[x]); + vmsk = _ivec_not(_ivec_cmpeq_s8(vsrca,vzero)); + vt[0] = _ivec_u16_from_u8(vdest,&vt[1]); + vt[2] = _ivec_u16_from_u8(vsrca,&vt[3]); + vt[0] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[0],vt[2]),8); + vt[1] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[1],vt[3]),8); + vt[0] = _ivec_add_s8(_ivec_u8_from_u16(vt[0],vt[1]),vsrc); + vt[1] = _ivec_blend_u8(vdest,vt[0],vmsk); + if(finalize) + _ivec_stream(&dstbase[x],vt[1]); + else + _ivec_storea(&dstbase[x],vt[1]); + } +#endif + for(;x<w;x++){ + if(srca[x]) dstbase[x]=((dstbase[x]*srca[x])>>8)+src[x]; + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif +PROFILE_END("vo_draw_alpha_yv12"); + return; +} + +static inline void PVECTOR_RENAME(vo_draw_alpha_yuy2)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; +#if defined(FAST_OSD) && !defined(HAVE_MMX) + w=w>>1; +#endif +PROFILE_START(); + for(y=0;y<h;y++){ + register int x=0; +#ifdef HAVE_INT_PVECTOR + /* TODO: port this stuff on PVector */ + __m64 mm[8]; + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + mm[7]=_mm_setzero_si64(); + mm[5]=_mm_set1_pi8(0xFF); + mm[4]=mm[5]; + mm[5]=_m_psllwi(mm[5],8); + mm[4]=_m_psrlwi(mm[4],8); + for(;x<w;x+=4){ + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + mm[0]=_m_load(&(((char *)dstbase)[x*2])); + mm[1]=mm[0]; + mm[0]=_m_pand(mm[0],mm[4]); + mm[2]=_m_load_half(&(((char *)srca)[x])); + mm[2]=_m_paddb(mm[2],_m_load(&bFF)); + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[0]=_m_pmullw(mm[0],mm[2]); + mm[0]=_m_psrlwi(mm[0],8); + mm[1]=_m_pand(mm[1],mm[5]); + mm[2]=_m_load_half(&(((char *)src)[x])); + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[0]=_m_por(mm[0],mm[1]); + mm[0]=_m_paddb(mm[0],mm[2]); + if(finalize) + _m_movntq(&(((char *)dstbase)[x*2]),mm[0]); + else + _m_store(&(((char *)dstbase)[x*2]),mm[0]); + } +#endif + for(;x<w;x++){ +#ifdef FAST_OSD + if(srca[2*x+0]) dstbase[4*x+0]=src[2*x+0]; + if(srca[2*x+1]) dstbase[4*x+2]=src[2*x+1]; +#else + if(srca[x]) { + dstbase[2*x]=((dstbase[2*x]*srca[x])>>8)+src[x]; + dstbase[2*x+1]=((((signed)dstbase[2*x+1]-128)*srca[x])>>8)+128; + } +#endif + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif +PROFILE_END("vo_draw_alpha_yuy2"); + return; +} + +static inline void PVECTOR_RENAME(vo_draw_alpha_rgb24)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; + for(y=0;y<h;y++){ + register unsigned char *dst = dstbase; + register int x=0; +#ifdef HAVE_INT_PVECTOR + __m64 mm[8]; + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + mm[7]=_mm_setzero_si64(); + mm[6]=_mm_set1_pi8(0xFF); + for(;x<w;x+=2){ + if(srca[x] || srca[x+1]) { + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + mm[0]=_m_load(&dstbase[0]); + mm[1]=mm[0]; + mm[5]=mm[0]; + mm[0]=_m_punpcklbw(mm[0],mm[7]); + mm[1]=_m_punpckhbw(mm[1],mm[7]); + mm[2]=_m_load_half(&srca[x]); + mm[2]=_m_paddb(mm[2],mm[6]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[3]=mm[2]; + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[3]=_m_punpckhbw(mm[3],mm[7]); + mm[0]=_m_pmullw(mm[0],mm[2]); + mm[1]=_m_pmullw(mm[1],mm[3]); + mm[0]=_m_psrlwi(mm[0],8); + mm[1]=_m_psrlwi(mm[1],8); + mm[0]=_m_packuswb(mm[0],mm[1]); + mm[2]=_m_load_half(&src[x]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[0]=_m_paddb(mm[0],mm[2]); + mm[5]=_m_pand(mm[5],_m_load(&mask24lh)); + mm[0]=_m_pand(mm[0],_m_load(&mask24hl)); + mm[5]=_m_por(mm[5],mm[0]); + if(finalize) + _m_movntq(&dstbase[0],mm[5]); + else + _m_store(&dstbase[0],mm[5]); + } + dst += 6; + } +#endif /* arch_x86 */ + for(;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD + dst[0]=dst[1]=dst[2]=src[x]; +#else + dst[0]=((dst[0]*srca[x])>>8)+src[x]; + dst[1]=((dst[1]*srca[x])>>8)+src[x]; + dst[2]=((dst[2]*srca[x])>>8)+src[x]; +#endif + } + dst+=3; // 24bpp + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif + return; +} + +static inline void PVECTOR_RENAME(vo_draw_alpha_rgb32)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ + int y; +PROFILE_START(); + for(y=0;y<h;y++){ + register int x=0; +#ifdef HAVE_INT_PVECTOR + __m64 mm[8]; + _ivec_prefetchw(&dstbase[x]); + _ivec_prefetch(&src[x]); + _ivec_prefetch(&srca[x]); + mm[7]=_mm_setzero_si64(); + mm[6]=_mm_set1_pi8(0xFF); + for(;x<w;x+=2){ + if(srca[x] || srca[x+1]) { + _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); + _ivec_prefetch(&src[x+_ivec_size()*4]); + _ivec_prefetch(&srca[x+_ivec_size()*4]); + mm[0]=_m_load(&dstbase[4*x]); + mm[1]=mm[0]; + mm[0]=_m_punpcklbw(mm[0],mm[7]); + mm[1]=_m_punpckhbw(mm[1],mm[7]); + mm[2]=_m_load_half(&srca[x]); + mm[2]=_m_paddb(mm[2],mm[6]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[3]=mm[2]; + mm[2]=_m_punpcklbw(mm[2],mm[7]); + mm[3]=_m_punpckhbw(mm[3],mm[7]); + mm[0]=_m_pmullw(mm[0],mm[2]); + mm[1]=_m_pmullw(mm[1],mm[3]); + mm[0]=_m_psrlwi(mm[0],8); + mm[1]=_m_psrlwi(mm[1],8); + mm[0]=_m_packuswb(mm[0],mm[1]); + mm[2]=_m_load_half(&src[x]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[2]=_m_punpcklbw(mm[2],mm[2]); + mm[0]=_m_paddb(mm[0],mm[2]); + if(finalize) + _m_movntq(&dstbase[4*x],mm[0]); + else + _m_store(&dstbase[4*x],mm[0]); + } + } +#endif /* arch_x86 */ + for(;x<w;x++){ + if(srca[x]){ +#ifdef FAST_OSD + dstbase[4*x+0]=dstbase[4*x+1]=dstbase[4*x+2]=src[x]; +#else + dstbase[4*x+0]=((dstbase[4*x+0]*srca[x])>>8)+src[x]; + dstbase[4*x+1]=((dstbase[4*x+1]*srca[x])>>8)+src[x]; + dstbase[4*x+2]=((dstbase[4*x+2]*srca[x])>>8)+src[x]; +#endif + } + } + src+=srcstride; + srca+=srcstride; + dstbase+=dststride; + } +#ifdef HAVE_INT_PVECTOR + _ivec_empty(); + if(finalize) _ivec_sfence(); +#endif +PROFILE_END("vo_draw_alpha_rgb32"); + return; +} Deleted: mplayerxp/libvo/osd_template.h =================================================================== --- mplayerxp/libvo/osd_template.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/osd_template.h 2012-11-27 15:55:31 UTC (rev 465) @@ -1,318 +0,0 @@ -// Generic alpha renderers for all YUV modes and RGB depths. -// Optimized by Nick and Michael -// Code from Michael Niedermayer (mic...@gm...) is under GPL -#include "pvector/pvector.h" - -#ifdef HAVE_INT_PVECTOR -static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_load)(const any_t*__P) -{ - return *(const __m64 *)__P; -} -#undef _m_load -#define _m_load PVECTOR_RENAME(_m_load) - -static __inline __m64 __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_load_half)(const any_t*__P) -{ - return _mm_cvtsi32_si64 (*(const int *)__P); -} -#undef _m_load_half -#define _m_load_half PVECTOR_RENAME(_m_load_half) - -static __inline void __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_store)(any_t*__P, __m64 src) -{ - *(__m64 *)__P = src; -} -#undef _m_store -#define _m_store PVECTOR_RENAME(_m_store) - -static __inline void __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_store_half)(any_t*__P, __m64 src) -{ - *(int *)__P = _mm_cvtsi64_si32(src); -} -#undef _m_store_half -#define _m_store_half PVECTOR_RENAME(_m_store_half) - -static __inline void __attribute__((__gnu_inline__, __always_inline__)) -PVECTOR_RENAME(_m_movntq)(any_t*__P, __m64 src) -{ -#ifdef HAVE_MMX2 - _mm_stream_pi(__P,src); -#else - _m_store(__P,src); -#endif -} -#undef _m_movntq -#define _m_movntq PVECTOR_RENAME(_m_movntq) - -#endif - -static inline void PVECTOR_RENAME(vo_draw_alpha_yv12)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - unsigned y; -#ifdef HAVE_INT_PVECTOR - __ivec vzero = _ivec_setzero(); -#endif -PROFILE_START(); - for(y=0;y<(unsigned)h;y++){ - int x; - x=0; -#ifdef HAVE_INT_PVECTOR - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - /* MOVNTDQ: #GP(0) - If memory operand is not aligned on a 16-byte boundary */ - if(!_ivec_aligned(dstbase)) - for(;x<w;x++){ - unsigned char *dst=&dstbase[x]; - if(srca[x]) *dst=((dstbase[x]*srca[x])>>8)+src[x]; - if(_ivec_aligned(dst)) break; /* align on sizeof(MMREG) boundary */ - } - if((w-x)>=_ivec_size()) - for(;x<w;x+=_ivec_size()){ - __ivec vmsk,vdest,vsrc,vsrca,vt[4]; - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - vdest = _ivec_loada(&dstbase[x]); - if(_ivec_aligned(&src[x])) - vsrc = _ivec_loada(&src[x]); - else - vsrc = _ivec_loadu(&src[x]); - if(_ivec_aligned(&srca[x])) - vsrca = _ivec_loada(&srca[x]); - else - vsrca = _ivec_loadu(&srca[x]); - vmsk = _ivec_not(_ivec_cmpeq_s8(vsrca,vzero)); - vt[0] = _ivec_u16_from_u8(vdest,&vt[1]); - vt[2] = _ivec_u16_from_u8(vsrca,&vt[3]); - vt[0] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[0],vt[2]),8); - vt[1] = _ivec_srl_s16_imm(_ivec_mullo_s16(vt[1],vt[3]),8); - vt[0] = _ivec_add_s8(_ivec_u8_from_u16(vt[0],vt[1]),vsrc); - vt[1] = _ivec_blend_u8(vdest,vt[0],vmsk); - if(finalize) - _ivec_stream(&dstbase[x],vt[1]); - else - _ivec_storea(&dstbase[x],vt[1]); - } -#endif - for(;x<w;x++){ - if(srca[x]) dstbase[x]=((dstbase[x]*srca[x])>>8)+src[x]; - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif -PROFILE_END("vo_draw_alpha_yv12"); - return; -} - -static inline void PVECTOR_RENAME(vo_draw_alpha_yuy2)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; -#if defined(FAST_OSD) && !defined(HAVE_MMX) - w=w>>1; -#endif -PROFILE_START(); - for(y=0;y<h;y++){ - register int x=0; -#ifdef HAVE_INT_PVECTOR - /* TODO: port this stuff on PVector */ - __m64 mm[8]; - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - mm[7]=_mm_setzero_si64(); - mm[5]=_mm_set1_pi8(0xFF); - mm[4]=mm[5]; - mm[5]=_m_psllwi(mm[5],8); - mm[4]=_m_psrlwi(mm[4],8); - for(;x<w;x+=4){ - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - mm[0]=_m_load(&(((char *)dstbase)[x*2])); - mm[1]=mm[0]; - mm[0]=_m_pand(mm[0],mm[4]); - mm[2]=_m_load_half(&(((char *)srca)[x])); - mm[2]=_m_paddb(mm[2],_m_load(&bFF)); - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[0]=_m_pmullw(mm[0],mm[2]); - mm[0]=_m_psrlwi(mm[0],8); - mm[1]=_m_pand(mm[1],mm[5]); - mm[2]=_m_load_half(&(((char *)src)[x])); - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[0]=_m_por(mm[0],mm[1]); - mm[0]=_m_paddb(mm[0],mm[2]); - if(finalize) - _m_movntq(&(((char *)dstbase)[x*2]),mm[0]); - else - _m_store(&(((char *)dstbase)[x*2]),mm[0]); - } -#endif - for(;x<w;x++){ -#ifdef FAST_OSD - if(srca[2*x+0]) dstbase[4*x+0]=src[2*x+0]; - if(srca[2*x+1]) dstbase[4*x+2]=src[2*x+1]; -#else - if(srca[x]) { - dstbase[2*x]=((dstbase[2*x]*srca[x])>>8)+src[x]; - dstbase[2*x+1]=((((signed)dstbase[2*x+1]-128)*srca[x])>>8)+128; - } -#endif - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif -PROFILE_END("vo_draw_alpha_yuy2"); - return; -} - -static inline void PVECTOR_RENAME(vo_draw_alpha_rgb24)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; - for(y=0;y<h;y++){ - register unsigned char *dst = dstbase; - register int x=0; -#ifdef HAVE_INT_PVECTOR - __m64 mm[8]; - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - mm[7]=_mm_setzero_si64(); - mm[6]=_mm_set1_pi8(0xFF); - for(;x<w;x+=2){ - if(srca[x] || srca[x+1]) { - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - mm[0]=_m_load(&dstbase[0]); - mm[1]=mm[0]; - mm[5]=mm[0]; - mm[0]=_m_punpcklbw(mm[0],mm[7]); - mm[1]=_m_punpckhbw(mm[1],mm[7]); - mm[2]=_m_load_half(&srca[x]); - mm[2]=_m_paddb(mm[2],mm[6]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[3]=mm[2]; - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[3]=_m_punpckhbw(mm[3],mm[7]); - mm[0]=_m_pmullw(mm[0],mm[2]); - mm[1]=_m_pmullw(mm[1],mm[3]); - mm[0]=_m_psrlwi(mm[0],8); - mm[1]=_m_psrlwi(mm[1],8); - mm[0]=_m_packuswb(mm[0],mm[1]); - mm[2]=_m_load_half(&src[x]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[0]=_m_paddb(mm[0],mm[2]); - mm[5]=_m_pand(mm[5],_m_load(&mask24lh)); - mm[0]=_m_pand(mm[0],_m_load(&mask24hl)); - mm[5]=_m_por(mm[5],mm[0]); - if(finalize) - _m_movntq(&dstbase[0],mm[5]); - else - _m_store(&dstbase[0],mm[5]); - } - dst += 6; - } -#endif /* arch_x86 */ - for(;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD - dst[0]=dst[1]=dst[2]=src[x]; -#else - dst[0]=((dst[0]*srca[x])>>8)+src[x]; - dst[1]=((dst[1]*srca[x])>>8)+src[x]; - dst[2]=((dst[2]*srca[x])>>8)+src[x]; -#endif - } - dst+=3; // 24bpp - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif - return; -} - -static inline void PVECTOR_RENAME(vo_draw_alpha_rgb32)(int w,int h,const unsigned char* src,const unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride,int finalize){ - int y; -PROFILE_START(); - for(y=0;y<h;y++){ - register int x=0; -#ifdef HAVE_INT_PVECTOR - __m64 mm[8]; - _ivec_prefetchw(&dstbase[x]); - _ivec_prefetch(&src[x]); - _ivec_prefetch(&srca[x]); - mm[7]=_mm_setzero_si64(); - mm[6]=_mm_set1_pi8(0xFF); - for(;x<w;x+=2){ - if(srca[x] || srca[x+1]) { - _ivec_prefetchw(&dstbase[x+_ivec_size()*4]); - _ivec_prefetch(&src[x+_ivec_size()*4]); - _ivec_prefetch(&srca[x+_ivec_size()*4]); - mm[0]=_m_load(&dstbase[4*x]); - mm[1]=mm[0]; - mm[0]=_m_punpcklbw(mm[0],mm[7]); - mm[1]=_m_punpckhbw(mm[1],mm[7]); - mm[2]=_m_load_half(&srca[x]); - mm[2]=_m_paddb(mm[2],mm[6]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[3]=mm[2]; - mm[2]=_m_punpcklbw(mm[2],mm[7]); - mm[3]=_m_punpckhbw(mm[3],mm[7]); - mm[0]=_m_pmullw(mm[0],mm[2]); - mm[1]=_m_pmullw(mm[1],mm[3]); - mm[0]=_m_psrlwi(mm[0],8); - mm[1]=_m_psrlwi(mm[1],8); - mm[0]=_m_packuswb(mm[0],mm[1]); - mm[2]=_m_load_half(&src[x]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[2]=_m_punpcklbw(mm[2],mm[2]); - mm[0]=_m_paddb(mm[0],mm[2]); - if(finalize) - _m_movntq(&dstbase[4*x],mm[0]); - else - _m_store(&dstbase[4*x],mm[0]); - } - } -#endif /* arch_x86 */ - for(;x<w;x++){ - if(srca[x]){ -#ifdef FAST_OSD - dstbase[4*x+0]=dstbase[4*x+1]=dstbase[4*x+2]=src[x]; -#else - dstbase[4*x+0]=((dstbase[4*x+0]*srca[x])>>8)+src[x]; - dstbase[4*x+1]=((dstbase[4*x+1]*srca[x])>>8)+src[x]; - dstbase[4*x+2]=((dstbase[4*x+2]*srca[x])>>8)+src[x]; -#endif - } - } - src+=srcstride; - srca+=srcstride; - dstbase+=dststride; - } -#ifdef HAVE_INT_PVECTOR - _ivec_empty(); - if(finalize) _ivec_sfence(); -#endif -PROFILE_END("vo_draw_alpha_rgb32"); - return; -} Modified: mplayerxp/libvo/sub.cpp =================================================================== --- mplayerxp/libvo/sub.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/sub.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -11,7 +11,6 @@ #include "video_out.h" #include "font_load.h" #include "sub.h" -#include "osd.h" #include "libmpsub/spudec.h" #include "libmpsub/vobsub.h" #define MSGT_CLASS MSGT_OSD Modified: mplayerxp/libvo/sub.h =================================================================== --- mplayerxp/libvo/sub.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/sub.h 2012-11-27 15:55:31 UTC (rev 465) @@ -1,7 +1,7 @@ #ifndef __MPLAYER_SUB_H #define __MPLAYER_SUB_H #include <inttypes.h> -#include "osd.h" +#include "osd_render.h" typedef struct mp_osd_bbox_s { int x1,y1,x2,y2; Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/video_out.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -44,7 +44,7 @@ #include "screenshot.h" #include "osdep/bswap.h" #include "dri_vo.h" -#include "osd.h" +#include "osd_render.h" #include "sub.h" #include "vo_msg.h" Modified: mplayerxp/libvo/video_out_internal.h =================================================================== --- mplayerxp/libvo/video_out_internal.h 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/video_out_internal.h 2012-11-27 15:55:31 UTC (rev 465) @@ -52,6 +52,4 @@ virtual MPXP_Rc ctrl(uint32_t request, any_t*data) = 0; }; -#include "osd.h" - #endif Modified: mplayerxp/libvo/vidix_system.cpp =================================================================== --- mplayerxp/libvo/vidix_system.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/vidix_system.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -27,8 +27,6 @@ #include "vidix_system.h" #include "osdep/fastmemcpy.h" -#include "osd.h" -#include "sub.h" #include "xmpcore/mp_image.h" #include "vo_msg.h" Modified: mplayerxp/libvo/vo_fbdev.cpp =================================================================== --- mplayerxp/libvo/vo_fbdev.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/libvo/vo_fbdev.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -34,7 +34,6 @@ #include "vidix_system.h" #endif #include "aspect.h" -#include "osd.h" #include "dri_vo.h" #include "libmpstream/mrl.h" #include "vo_msg.h" Modified: mplayerxp/postproc/libmenu/menu.cpp =================================================================== --- mplayerxp/postproc/libmenu/menu.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/postproc/libmenu/menu.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -11,7 +11,7 @@ #include <fcntl.h> #include <unistd.h> -#include "libvo/osd.h" +#include "libvo/osd_render.h" #include "libvo/font_load.h" #include "libvo/sub.h" #include "osdep/keycodes.h" Modified: mplayerxp/postproc/vf_expand.cpp =================================================================== --- mplayerxp/postproc/vf_expand.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/postproc/vf_expand.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -16,7 +16,6 @@ #ifdef OSD_SUPPORT #include "libvo/video_out.h" #include "libvo/sub.h" -#include "libvo/osd.h" #endif #include "pp_msg.h" #include "mplayerxp.h" // vo_data Modified: mplayerxp/postproc/vf_panscan.cpp =================================================================== --- mplayerxp/postproc/vf_panscan.cpp 2012-11-27 15:26:22 UTC (rev 464) +++ mplayerxp/postproc/vf_panscan.cpp 2012-11-27 15:55:31 UTC (rev 465) @@ -17,7 +17,6 @@ #ifdef OSD_SUPPORT #include "libvo/sub.h" -#include "libvo/osd.h" #endif #include "pp_msg.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-28 09:43:48
|
Revision: 470 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=470&view=rev Author: nickols_k Date: 2012-11-28 09:43:36 +0000 (Wed, 28 Nov 2012) Log Message: ----------- convert demux_packet_t into class Demux_Packet Modified Paths: -------------- mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpdemux/demux_dv.cpp mplayerxp/libmpdemux/demux_film.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mkv.cpp mplayerxp/libmpdemux/demux_mov.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_ogg.cpp mplayerxp/libmpdemux/demux_pva.cpp mplayerxp/libmpdemux/demux_ra.cpp mplayerxp/libmpdemux/demux_rawaudio.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demux_vqf.cpp mplayerxp/libmpdemux/demux_y4m.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/libmpstream/s_tv.cpp mplayerxp/libvo/x11_system.cpp Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -183,18 +183,17 @@ sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); int l = sh_audio->wf->nAvgBytesPerSec; off_t spos = stream_tell(demuxer->stream); - demux_packet_t* dp; if(stream_eof(demuxer->stream)) return 0; - dp = new_demux_packet(l); + Demux_Packet* dp = new(zeromem) Demux_Packet(l); dp->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec); dp->pos = spos; dp->flags = DP_NONKEYFRAME; l=stream_read(demuxer->stream,dp->buffer,l); - resize_demux_packet(dp,l); + dp->resize(l); ds_add_packet(ds,dp); return 1; @@ -219,6 +218,9 @@ static MPXP_Rc aiff_control(const demuxer_t *demuxer,int cmd,any_t*args) { + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -455,7 +455,7 @@ ds->asf_packet=NULL; } else { // append data to it! - demux_packet_t* dp=ds->asf_packet; + Demux_Packet* dp=ds->asf_packet; if(dp->len!=offs && offs!=-1) MSG_V("warning! fragment.len=%d BUT next fragment offset=%d \n",dp->len,offs); dp->buffer=(unsigned char*)mp_realloc(dp->buffer,dp->len+len); stream_seek(demux->stream,dataoff); @@ -467,21 +467,21 @@ } } // create new packet: - { demux_packet_t* dp; + { if(offs>0){ MSG_V("warning! broken fragment or incomplete seeking, %d bytes missing \n",offs); return 0; } - dp=new_demux_packet(len); + Demux_Packet& dp=*new(zeromem) Demux_Packet(len); stream_seek(demux->stream,dataoff); - len=stream_read(demux->stream,dp->buffer,len); - resize_demux_packet(dp,len); - dp->pts=time*0.001f; - dp->flags=keyframe?DP_KEYFRAME:DP_NONKEYFRAME; - dp->pos=demux->filepos; - ds->asf_packet=dp; + len=stream_read(demux->stream,dp.buffer,len); + dp.resize(len); + dp.pts=time*0.001f; + dp.flags=keyframe?DP_KEYFRAME:DP_NONKEYFRAME; + dp.pos=demux->filepos; + ds->asf_packet=&dp; ds->asf_seq=seq; - MSG_DBG2("ASF: reading %s PTS %u %f %i\n",ds==demux->audio?"audio":"video",time,dp->pts,keyframe); + MSG_DBG2("ASF: reading %s PTS %u %f %i\n",ds==demux->audio?"audio":"video",time,dp.pts,keyframe); // we are ready now. return 1; } @@ -717,6 +717,9 @@ static MPXP_Rc asf_control(const demuxer_t *demuxer,int cmd,any_t*args) { + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -1438,15 +1438,14 @@ if(len < 0) { stream_skip(s,-3); } else { - demux_packet_t* dp; if(stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) return 0; if(len>4) { - dp = new_demux_packet(len); + Demux_Packet* dp = new(zeromem) Demux_Packet(len); memcpy(dp->buffer,hdr,4); len=stream_read(s,dp->buffer + 4,len-4); - resize_demux_packet(dp,len+4); + dp->resize(len+4); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (ds_tell_pts(demux->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; @@ -1468,15 +1467,14 @@ if(len < 0) { stream_skip(s,-7); } else { - demux_packet_t* dp; if(stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) return 0; if(len>8) { - dp = new_demux_packet(len); + Demux_Packet* dp = new(zeromem) Demux_Packet(len); memcpy(dp->buffer,hdr,8); len=stream_read(s,dp->buffer+8,len-8); - resize_demux_packet(dp,len+8); + dp->resize(len+8); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (ds_tell_pts(demux->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; @@ -1498,15 +1496,14 @@ if(len < 0) { stream_skip(s,-15); } else { - demux_packet_t* dp; if(stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) return 0; if(len>16) { - dp = new_demux_packet(len); + Demux_Packet* dp = new(zeromem) Demux_Packet(len); memcpy(dp->buffer,hdr,16); len=stream_read(s,dp->buffer+16,len-16); - resize_demux_packet(dp,len+16); + dp->resize(len+16); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (ds_tell_pts(demux->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; @@ -1520,9 +1517,9 @@ case RAW_SND_AU: case RAW_WAV : { int l = sh_audio->wf->nAvgBytesPerSec; - demux_packet_t* dp = new_demux_packet(l); + Demux_Packet* dp =new(zeromem) Demux_Packet(l); l=stream_read(s,dp->buffer,l); - resize_demux_packet(dp, l); + dp->resize(l); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + l/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (ds_tell_pts(demux->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; @@ -1531,9 +1528,9 @@ } case RAW_VOC : { int l = 65536; - demux_packet_t* dp = new_demux_packet(l); + Demux_Packet* dp =new(zeromem) Demux_Packet(l); l=stream_read(s,dp->buffer,l); - resize_demux_packet(dp, l); + dp->resize(l); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + l/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (ds_tell_pts(demux->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; @@ -1543,14 +1540,13 @@ case RAW_MUSEPACK: { int l; int bit_len; - demux_packet_t* dp; s = demux->stream; sh_audio = reinterpret_cast<sh_audio_t*>(ds->sh); if (s->eof) return 0; bit_len = mpc_get_bits(priv, s, 20); - dp = new_demux_packet((bit_len + 7) / 8); + Demux_Packet* dp=new(zeromem) Demux_Packet((bit_len + 7) / 8); for (l = 0; l < (bit_len / 8); l++) dp->buffer[l] = mpc_get_bits(priv, s, 8); bit_len %= 8; @@ -1776,6 +1772,9 @@ static MPXP_Rc audio_control(const demuxer_t *demuxer,int cmd,any_t*args) { + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -99,10 +99,9 @@ unsigned npal_colors; int fake_24; uint8_t *dst,*src; - demux_packet_t* dp; npal_colors = img->format->palette ? img->format->palette->ncolors : 0; fake_24 = img->format->BitsPerPixel == 8 && npal_colors > 0; - dp = new_demux_packet(fake_24 ? len*3 : len); + Demux_Packet* dp = new(zeromem) Demux_Packet(fake_24 ? len*3 : len); dst = dp->buffer; src =reinterpret_cast<uint8_t*>(img->pixels); if(fake_24) @@ -302,6 +301,9 @@ static MPXP_Rc bmp_control(const demuxer_t *demuxer,int cmd,any_t*args) { + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demux_dv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_dv.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_dv.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -101,7 +101,6 @@ static int dv_demux(demuxer_t *demuxer, demux_stream_t *ds) { rawdv_frames_t *frames = (rawdv_frames_t *)demuxer->priv; - demux_packet_t* dp_video=NULL; sh_video_t *sh_video = reinterpret_cast<sh_video_t*>(demuxer->video->sh); int bytes_read=0; // fprintf(stderr,"demux_rawdv_fill_buffer() seek to %qu, size: %d\n",frames->current_filepos,frames->frame_size); @@ -110,7 +109,7 @@ // seem to do it, even though it takes a file offset as a parameter stream_seek(demuxer->stream, frames->current_filepos); - dp_video=new_demux_packet(frames->frame_size); + Demux_Packet* dp_video=new(zeromem) Demux_Packet(frames->frame_size); bytes_read=stream_read(demuxer->stream,dp_video->buffer,frames->frame_size); if (bytes_read<frames->frame_size) return 0; @@ -120,7 +119,7 @@ if (demuxer->audio && demuxer->audio->id>=-1) { - demux_packet_t* dp_audio=clone_demux_packet(dp_video); + Demux_Packet* dp_audio=dp_video->clone(); ds_add_packet(demuxer->audio,dp_audio); } ds_add_packet(demuxer->video,dp_video); Modified: mplayerxp/libmpdemux/demux_film.cpp =================================================================== --- mplayerxp/libmpdemux/demux_film.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_film.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -93,7 +93,7 @@ film_data_t *film_data = (film_data_t *)demuxer->priv; film_chunk_t film_chunk; int length_fix_bytes; - demux_packet_t* dp; + Demux_Packet* dp; // see if the end has been reached if (film_data->current_chunk >= film_data->total_chunks) @@ -110,7 +110,7 @@ if (film_chunk.syncinfo1 == 0xFFFFFFFF) { if(demuxer->audio->id>=-1){ // audio not disabled - dp = new_demux_packet(film_chunk.chunk_size); + dp = new(zeromem) Demux_Packet(film_chunk.chunk_size); if (stream_read(demuxer->stream, dp->buffer, film_chunk.chunk_size) != film_chunk.chunk_size) return 0; dp->pts = film_chunk.pts; @@ -146,7 +146,7 @@ length_fix_bytes = 6; // account for the fix bytes when allocating the buffer - dp = new_demux_packet(film_chunk.chunk_size - length_fix_bytes); + dp = new(zeromem) Demux_Packet(film_chunk.chunk_size - length_fix_bytes); // these CVID data chunks have a few extra bytes; skip them if (stream_read(demuxer->stream, dp->buffer, 10) != 10) @@ -438,6 +438,9 @@ static MPXP_Rc film_control(const demuxer_t *demuxer,int cmd,any_t*args) { + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -404,7 +404,7 @@ UNUSED(dsds); lavf_priv_t *priv= reinterpret_cast<lavf_priv_t*>(demux->priv); AVPacket pkt; - demux_packet_t *dp; + Demux_Packet *dp; demux_stream_t *ds; int id; MSG_DBG2("lavf_demux()\n"); @@ -442,7 +442,7 @@ if(0/*pkt.destruct == av_destruct_packet*/){ //ok kids, dont try this at home :) - dp=(demux_packet_t*)mp_malloc(sizeof(demux_packet_t)); + dp=new(zeromem) Demux_Packet(pkt.size); dp->len=pkt.size; dp->next=NULL; // dp->refcount=1; @@ -450,7 +450,7 @@ dp->buffer=pkt.data; pkt.destruct= NULL; }else{ - dp=new_demux_packet(pkt.size); + dp=new(zeromem) Demux_Packet(pkt.size); memcpy(dp->buffer, pkt.data, pkt.size); av_free_packet(&pkt); } Modified: mplayerxp/libmpdemux/demux_mkv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mkv.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_mkv.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -534,7 +534,7 @@ in display order (the timecodes, not the frames themselves!). In this case demux packets have to be cached with the help of these variables. */ int reorder_timecodes; - demux_packet_t **cached_dps; + Demux_Packet **cached_dps; int num_cached_dps, num_allocated_dps; float max_pts; @@ -851,8 +851,7 @@ for (k = 0; k < mkv_d->num_tracks; k++) { track = mkv_d->tracks[k]; - for (i = 0; i < track->num_cached_dps; i++) - free_demux_packet (track->cached_dps[i]); + for (i = 0; i < track->num_cached_dps; i++) delete track->cached_dps[i]; delete track->cached_dps; track->cached_dps = NULL; track->num_cached_dps = 0; @@ -2333,7 +2332,7 @@ { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; sh_audio_t *sh_a = new_sh_audio_aid(demuxer, track->tnum, aid); - demux_packet_t *dp; + Demux_Packet *dp; if(!sh_a) return 1; mkv_d->audio_tracks[mkv_d->last_aid] = track->tnum; @@ -2622,12 +2621,12 @@ if (size < 4 || ptr[0] != 'f' || ptr[1] != 'L' || ptr[2] != 'a' || ptr[3] != 'C') { - dp = new_demux_packet (4); + dp = new(zeromem) Demux_Packet (4); memcpy (dp->buffer, "fLaC", 4); } else { - dp = new_demux_packet (size); + dp = new(zeromem) Demux_Packet (size); memcpy (dp->buffer, ptr, size); } dp->pts = 0; @@ -3184,7 +3183,7 @@ handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, int64_t size, uint64_t block_duration, uint64_t timecode) { - demux_packet_t *dp; + Demux_Packet *dp; char *ptr1; int i; @@ -3214,7 +3213,7 @@ sub_data.utf8 = 1; size -= ptr1 - block; - dp = new_demux_packet(size); + dp = new(zeromem) Demux_Packet(size); memcpy(dp->buffer, ptr1, size); dp->pts = timecode / 1000.0f; #if 0 @@ -3284,7 +3283,7 @@ uint32_t size, int block_bref) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; - demux_packet_t *dp; + Demux_Packet *dp; uint32_t timestamp = mkv_d->last_pts * 1000; uint32_t *hdr; uint8_t chunks; @@ -3296,7 +3295,7 @@ chunks = *buffer++; isize = --size - (chunks+1)*8; - dp = new_demux_packet (REALHEADER_SIZE + size); + dp = new(zeromem) Demux_Packet (REALHEADER_SIZE + size); memcpy (dp->buffer + REALHEADER_SIZE, buffer + (chunks+1)*8, isize); #ifdef WORDS_BIGENDIAN p = (uint8_t *)(dp->buffer + REALHEADER_SIZE + isize); @@ -3341,7 +3340,7 @@ int cfs = track->coded_framesize; int w = track->audiopk_size; int spc = track->sub_packet_cnt; - demux_packet_t *dp; + Demux_Packet *dp; int x; if ((track->a_formattag == mmioFOURCC('2', '8', '_', '8')) || @@ -3403,7 +3402,7 @@ // Release all the audio packets for (x = 0; x < sph*w/apk_usize; x++) { - dp = new_demux_packet(apk_usize); + dp = new(zeromem) Demux_Packet(apk_usize); memcpy(dp->buffer, track->audio_buf + x * apk_usize, apk_usize); /* Put timestamp only on packets that correspond to original audio packets in file */ dp->pts = (x * apk_usize % w) ? 0 : track->audio_timestamp[x * apk_usize / w]; @@ -3413,7 +3412,7 @@ } } } else { // Not a codec that require reordering - dp = new_demux_packet (size); + dp = new(zeromem) Demux_Packet (size); memcpy(dp->buffer, buffer, size); if (track->ra_pts == mkv_d->last_pts && !mkv_d->a_skip_to_keyframe) dp->pts = 0; @@ -3494,9 +3493,9 @@ uint32_t size, int block_bref, int block_fref) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; - demux_packet_t *dp; + Demux_Packet *dp; - dp = new_demux_packet (size); + dp = new(zeromem) Demux_Packet (size); memcpy(dp->buffer, buffer, size); dp->pos = demuxer->filepos; dp->pts = mkv_d->last_pts; @@ -3508,9 +3507,9 @@ dp->flags = 0x10; if ((track->num_cached_dps + 1) > track->num_allocated_dps) { - track->cached_dps = (demux_packet_t **) + track->cached_dps = (Demux_Packet **) mp_realloc(track->cached_dps, (track->num_cached_dps + 10) * - sizeof(demux_packet_t *)); + sizeof(Demux_Packet *)); track->num_allocated_dps += 10; } track->cached_dps[track->num_cached_dps] = dp; @@ -3649,12 +3648,11 @@ { int modified; unsigned size = lace_size[i]; - demux_packet_t *dp; + Demux_Packet *dp; uint8_t *buffer; modified = demux_mkv_decode (track, block, &buffer, &size, 1); - if (buffer) - { - dp = new_demux_packet (size); + if (buffer) { + dp = new(zeromem) Demux_Packet (size); memcpy (dp->buffer, buffer, size); if (modified) delete buffer; Modified: mplayerxp/libmpdemux/demux_mov.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mov.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_mov.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -1982,11 +1982,11 @@ } if(trak->pos==0 && trak->stream_header_len>0){ // we have to append the stream header... - demux_packet_t* dp=new_demux_packet(x+trak->stream_header_len); + Demux_Packet* dp=new(zeromem) Demux_Packet(x+trak->stream_header_len); memcpy(dp->buffer,trak->stream_header,trak->stream_header_len); dp->pos=stream_tell(demuxer->stream)-trak->stream_header_len; x=stream_read(demuxer->stream,dp->buffer+trak->stream_header_len,x); - resize_demux_packet(dp,x+trak->stream_header_len); + dp->resize(x+trak->stream_header_len); delete trak->stream_header; trak->stream_header = NULL; trak->stream_header_len = 0; Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -395,19 +395,18 @@ } if(pts==MPGPES_BAD_PTS && ds->asf_packet) { - demux_packet_t* dp=ds->asf_packet; + Demux_Packet* dp=ds->asf_packet; dp->buffer=(unsigned char *)mp_realloc(dp->buffer,dp->len+len); stream_read(demux->stream,dp->buffer+dp->len,len); dp->len+=len; } else { - demux_packet_t* dp; sh_video_t *sh; if(ds->asf_packet) ds_add_packet(ds,ds->asf_packet); - dp=new_demux_packet(len); + Demux_Packet* dp=new(zeromem) Demux_Packet(len); len=stream_read(demux->stream,dp->buffer,len); - resize_demux_packet(dp,len); + dp->resize(len); dp->pts=pts/90000.0f; if(ds==demux->video) sh=(sh_video_t *)ds->sh; else sh=NULL; Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -575,11 +575,10 @@ } if(ds){ off_t pos=0LL; - demux_packet_t* dp; - dp=new_demux_packet(len); + Demux_Packet* dp=new(zeromem) Demux_Packet(len); if(mp_conf.verbose>1) pos=stream_tell(s); len=stream_read(s,dp->buffer,len); - resize_demux_packet(dp,len); + dp->resize(len); dp->pts=pts; dp->flags=keyframe?DP_KEYFRAME:DP_NONKEYFRAME; dp->pos=demux->filepos; @@ -892,6 +891,9 @@ static MPXP_Rc mpxpav64_control(const demuxer_t *demuxer,int cmd,any_t*args) { + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demux_ogg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ogg.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_ogg.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -507,7 +507,7 @@ // return 1 if the packet was added, 0 otherwise static int demux_ogg_add_packet(demux_stream_t* ds,ogg_stream_t* os,int id,ogg_packet* pack) { demuxer_t* d = ds->demuxer; - demux_packet_t* dp; + Demux_Packet* dp; unsigned char* data; float pts = 0; int flags = 0; @@ -563,7 +563,7 @@ clear_sub = -1; } /// Send the packet - dp = new_demux_packet(pack->bytes-(data-pack->packet)); + dp = new(zeromem) Demux_Packet(pack->bytes-(data-pack->packet)); memcpy(dp->buffer,data,pack->bytes-(data-pack->packet)); dp->pts = pts; dp->flags = flags?DP_KEYFRAME:DP_NONKEYFRAME; @@ -1166,7 +1166,7 @@ ogg_demuxer_t *ogg_d; stream_t* s; uint32_t hdrsizes[3]; - demux_packet_t *dp; + Demux_Packet *dp; sh_audio_t *sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); int np; unsigned char *p = NULL,*buf; @@ -1221,15 +1221,15 @@ /// Add the header packets in the ogg demuxer audio stream // Initial header - dp = new_demux_packet(hdrsizes[0]); + dp = new(zeromem) Demux_Packet(hdrsizes[0]); memcpy(dp->buffer,((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t),hdrsizes[0]); ds_add_packet(od->audio,dp); /// Comments - dp = new_demux_packet(hdrsizes[1]); + dp = new(zeromem) Demux_Packet(hdrsizes[1]); memcpy(dp->buffer,((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t)+hdrsizes[0],hdrsizes[1]); ds_add_packet(od->audio,dp); /// Code book - dp = new_demux_packet(hdrsizes[2]); + dp = new(zeromem) Demux_Packet(hdrsizes[2]); memcpy(dp->buffer,((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t)+hdrsizes[0]+hdrsizes[1],hdrsizes[2]); ds_add_packet(od->audio,dp); Modified: mplayerxp/libmpdemux/demux_pva.cpp =================================================================== --- mplayerxp/libmpdemux/demux_pva.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_pva.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -185,7 +185,7 @@ static int pva_demux(demuxer_t * demux,demux_stream_t *__ds) { uint8_t done=0; - demux_packet_t * dp; + Demux_Packet * dp; pva_priv_t * priv=reinterpret_cast<pva_priv_t*>(demux->priv); pva_payload_t current_payload; @@ -219,18 +219,15 @@ priv->last_video_pts=current_payload.pts; //MSG_DBG2("demux_pva: Video PTS=%llu , delivered %f\n",current_payload.pts,priv->last_video_pts); } - if(done) - { + if(done) { int l; - dp=new_demux_packet(current_payload.size); + dp=new(zeromem) Demux_Packet(current_payload.size); dp->pts=priv->last_video_pts; dp->flags=DP_NONKEYFRAME; l=stream_read(demux->stream,dp->buffer,current_payload.size); - resize_demux_packet(dp,l); + dp->resize(l); ds_add_packet(demux->video,dp); - } - else - { + } else { //printf("Skipping %u video bytes\n",current_payload.size); stream_skip(demux->stream,current_payload.size); } @@ -251,19 +248,16 @@ priv->last_audio_pts=current_payload.pts; } if(demux->audio->id!=0) done=0; - if(done) - { + if(done) { int l; - dp=new_demux_packet(current_payload.size); + dp=new(zeromem) Demux_Packet(current_payload.size); dp->pts=priv->last_audio_pts; if(current_payload.offset != stream_tell(demux->stream)) stream_seek(demux->stream,current_payload.offset); l=stream_read(demux->stream,dp->buffer,current_payload.size); - resize_demux_packet(dp,l); + dp->resize(l); ds_add_packet(demux->audio,dp); - } - else - { + } else { stream_skip(demux->stream,current_payload.size); } break; @@ -279,7 +273,7 @@ off_t next_offset,pva_payload_start; unsigned char buffer[256]; #ifndef PVA_NEW_PREBYTES_CODE - demux_packet_t * dp; //hack to deliver the preBytes (see PVA doc) + Demux_Packet * dp; //hack to deliver the preBytes (see PVA doc) #endif pva_priv_t * priv=(pva_priv_t *) d->priv; Modified: mplayerxp/libmpdemux/demux_ra.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ra.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_ra.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -67,7 +67,6 @@ demux_stream_t *ds = demuxer->audio; sh_audio_t *sh = reinterpret_cast<sh_audio_t*>(ds->sh); WAVEFORMATEX *wf = sh->wf; - demux_packet_t *dp; if (stream_eof(demuxer->stream)) return 0; @@ -77,9 +76,9 @@ len = wf->nBlockAlign; demuxer->filepos = stream_tell(demuxer->stream); - dp = new_demux_packet(len); + Demux_Packet *dp = new(zeromem) Demux_Packet(len); len=stream_read(demuxer->stream, dp->buffer, len); - resize_demux_packet(dp,len); + dp->resize(len); if(sh->i_bps) { Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -79,17 +79,16 @@ sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); int l = sh_audio->wf->nAvgBytesPerSec; off_t spos = stream_tell(demuxer->stream); - demux_packet_t* dp; if(stream_eof(demuxer->stream)) return 0; - dp = new_demux_packet(l); + Demux_Packet* dp = new(zeromem) Demux_Packet(l); dp->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec); dp->pos = spos; dp->flags=DP_NONKEYFRAME; l=stream_read(demuxer->stream,dp->buffer,l); - resize_demux_packet(dp,l); + dp->resize(l); ds_add_packet(ds,dp); return 1; Modified: mplayerxp/libmpdemux/demux_real.cpp =================================================================== --- mplayerxp/libmpdemux/demux_real.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_real.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -405,7 +405,7 @@ int flags; int version; int reserved; - demux_packet_t *dp; + Demux_Packet *dp; while(1){ @@ -504,9 +504,9 @@ sub_packet_lengths[i] = stream_read_word(demuxer->stream); for (i = 0; i < sub_packets; i++) { int l; - demux_packet_t *dp = new_demux_packet(sub_packet_lengths[i]); + Demux_Packet *dp = new(zeromem) Demux_Packet(sub_packet_lengths[i]); l=stream_read(demuxer->stream, dp->buffer, sub_packet_lengths[i]); - resize_demux_packet(dp,l); + dp->resize(l); dp->pts = pts; priv->a_pts = pts; dp->pos = demuxer->filepos; @@ -516,9 +516,9 @@ delete sub_packet_lengths; return 1; } - dp = new_demux_packet(len); + dp = new(zeromem) Demux_Packet(len); len=stream_read(demuxer->stream, dp->buffer, len); - resize_demux_packet(dp,len); + dp->resize(len); if (priv->audio_need_keyframe == 1) { dp->pts = 0; priv->audio_need_keyframe = 0; @@ -556,7 +556,7 @@ // we need a more complicated, 2nd level demuxing, as the video // frames are stored fragmented in the video chunks :( sh_video_t *sh_video = reinterpret_cast<sh_video_t*>(ds->sh); - demux_packet_t *dp; + Demux_Packet *dp; int vpkg_header, vpkg_length, vpkg_offset; int vpkg_seqnum=-1; int vpkg_subseq=0; @@ -697,7 +697,7 @@ } } // create new packet! - dp = new_demux_packet(sizeof(dp_hdr_t)+vpkg_length+8*(1+2*(vpkg_header&0x3F))); + dp = new(zeromem) Demux_Packet(sizeof(dp_hdr_t)+vpkg_length+8*(1+2*(vpkg_header&0x3F))); // the timestamp seems to be in milliseconds dp->pts = 0; // timestamp/1000.0f; //timestamp=0; dp->pos = demuxer->filepos; Modified: mplayerxp/libmpdemux/demux_ts.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ts.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_ts.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -122,7 +122,7 @@ typedef struct { demux_stream_t *ds; - demux_packet_t *pack; + Demux_Packet *pack; int offset, buffer_size; } av_fifo_t; @@ -1510,7 +1510,7 @@ { if((priv->fifo[i].pack != NULL) && (priv->fifo[i].offset != 0)) { - resize_demux_packet(priv->fifo[i].pack, priv->fifo[i].offset); + priv->fifo[i].pack->resize(priv->fifo[i].offset); ds_add_packet(priv->fifo[i].ds, priv->fifo[i].pack); priv->fifo[i].offset = 0; priv->fifo[i].pack = NULL; @@ -2519,14 +2519,14 @@ } -static int fill_packet(demuxer_t *demuxer, demux_stream_t *ds, demux_packet_t **dp, int *dp_offset, TS_stream_info *si) +static int fill_packet(demuxer_t *demuxer, demux_stream_t *ds, Demux_Packet **dp, int *dp_offset, TS_stream_info *si) { int ret = 0; if((*dp != NULL) && (*dp_offset > 0)) { ret = *dp_offset; - resize_demux_packet(*dp, ret); //shrinked to the right size + (*dp)->resize(ret); //shrinked to the right size ds_add_packet(ds, *dp); MSG_DBG2( "ADDED %d bytes to %s fifo, PTS=%f\n", ret, (ds == demuxer->audio ? "audio" : (ds == demuxer->video ? "video" : "sub")), (*dp)->pts); if(si) @@ -2594,7 +2594,7 @@ stream_t *stream = demuxer->stream; unsigned char *p; demux_stream_t *ds = NULL; - demux_packet_t **dp = NULL; + Demux_Packet **dp = NULL; int *dp_offset = 0, *buffer_size = 0; int32_t progid=0, pid_type, bad, ts_error; int junk = 0, rap_flag = 0; @@ -2607,7 +2607,7 @@ { bad = ts_error = 0; ds = (demux_stream_t*) NULL; - dp = (demux_packet_t **) NULL; + dp = (Demux_Packet **) NULL; dp_offset = buffer_size = NULL; rap_flag = 0; mp4_dec = NULL; @@ -2823,7 +2823,7 @@ { if(*buffer_size > MAX_PACK_BYTES) *buffer_size = MAX_PACK_BYTES; - *dp = new_demux_packet(*buffer_size); //es->size + *dp = new(zeromem) Demux_Packet(*buffer_size); //es->size *dp_offset = 0; if(! *dp) { @@ -2844,7 +2844,7 @@ if(*dp_offset + buf_size > *buffer_size) { *buffer_size = *dp_offset + buf_size + TS_FEC_PACKET_SIZE; - resize_demux_packet(*dp, *buffer_size); + (*dp)->resize(*buffer_size); } p = &((*dp)->buffer[*dp_offset]); } @@ -3022,7 +3022,7 @@ { if(priv->fifo[0].pack != NULL) { - free_demux_packet(priv->fifo[0].pack); + delete priv->fifo[0].pack; priv->fifo[0].pack = NULL; } priv->fifo[0].offset = 0; @@ -3032,7 +3032,7 @@ { if(priv->fifo[1].pack != NULL) { - free_demux_packet(priv->fifo[1].pack); + delete priv->fifo[1].pack; priv->fifo[1].pack = NULL; } priv->fifo[1].offset = 0; @@ -3042,7 +3042,7 @@ { if(priv->fifo[2].pack != NULL) { - free_demux_packet(priv->fifo[2].pack); + delete priv->fifo[2].pack; priv->fifo[2].pack = NULL; } priv->fifo[2].offset = 0; Modified: mplayerxp/libmpdemux/demux_ty.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ty.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_ty.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -293,7 +293,7 @@ static void demux_ty_CopyToDemuxPacket( demux_stream_t *ds, unsigned char *buffer, int size, off_t pos, int64_t pts ) { - demux_packet_t *dp = new_demux_packet( size ); + Demux_Packet *dp = new(zeromem) Demux_Packet( size ); memcpy( dp->buffer, buffer, size ); if (pts != -1) dp->pts = pts / 90000.0; Modified: mplayerxp/libmpdemux/demux_viv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_viv.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_viv.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -394,7 +394,7 @@ ds->asf_packet=NULL; } else { // append data to it! - demux_packet_t* dp=ds->asf_packet; + Demux_Packet* dp=ds->asf_packet; dp->buffer=(unsigned char *)mp_realloc(dp->buffer,dp->len+len); //memcpy(dp->buffer+dp->len,data,len); stream_read(demux->stream,dp->buffer+dp->len,len); @@ -406,11 +406,10 @@ } } // create new packet: - { demux_packet_t* dp; - dp=new_demux_packet(len); + Demux_Packet* dp=new(zeromem) Demux_Packet(len); //memcpy(dp->buffer,data,len); len=stream_read(demux->stream,dp->buffer,len); - resize_demux_packet(dp,len); + dp->resize(len); dp->pts=audio_rate?((float)audio_pos/(float)audio_rate):0; dp->flags=DP_NONKEYFRAME; dp->pos=demux->filepos; @@ -418,8 +417,6 @@ ds->asf_seq=seq; // we are ready now. return 1; - } - } static const short h263_format[8][2] = { Modified: mplayerxp/libmpdemux/demux_vqf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_vqf.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_vqf.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -191,18 +191,18 @@ sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); int l = sh_audio->wf->nAvgBytesPerSec; off_t spos = stream_tell(demuxer->stream); - demux_packet_t* dp; + Demux_Packet* dp; if(stream_eof(demuxer->stream)) return 0; - dp = new_demux_packet(l); + dp = new(zeromem) Demux_Packet(l); dp->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec); dp->pos = spos; dp->flags = DP_NONKEYFRAME; l=stream_read(demuxer->stream,dp->buffer,l); - resize_demux_packet(dp,l); + dp->resize(l); ds_add_packet(ds,dp); return 1; Modified: mplayerxp/libmpdemux/demux_y4m.cpp =================================================================== --- mplayerxp/libmpdemux/demux_y4m.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demux_y4m.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -67,7 +67,7 @@ static int y4m_demux(demuxer_t *demux,demux_stream_t *__ds) { UNUSED(__ds); demux_stream_t *ds=demux->video; - demux_packet_t *dp; + Demux_Packet *dp; y4m_priv_t *priv=reinterpret_cast<y4m_priv_t*>(demux->priv); y4m_frame_info_t fi; unsigned char *buf[3]; @@ -77,7 +77,7 @@ size = ((sh_video_t*)ds->sh)->src_w*((sh_video_t*)ds->sh)->src_h; - dp = new_demux_packet(3*size/2); + dp = new(zeromem) Demux_Packet(3*size/2); /* swap U and V components */ buf[0] = dp->buffer; Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -260,9 +260,46 @@ } } +Demux_Packet::Demux_Packet(unsigned _len) + :pts(0), + pos(0), + flags(0), + next(NULL) +{ + len=_len; + buffer=new unsigned char [len]; +} -void ds_add_packet(demux_stream_t *ds,demux_packet_t* dp){ -// demux_packet_t* dp=new_demux_packet(len); +Demux_Packet::~Demux_Packet(){ + if(buffer) delete buffer; +} + +void Demux_Packet::resize(unsigned newlen) +{ + if(len!=newlen) { + if(newlen) { + buffer=(unsigned char *)mp_realloc(buffer,newlen+8); + memset(buffer+newlen,0,8); + } else { + if(buffer) delete buffer; + buffer=NULL; + } + len=newlen; + } +} + +Demux_Packet* Demux_Packet::clone() const { + Demux_Packet* dp=new Demux_Packet(len); + dp->pts=pts; + dp->pos=pos; + dp->flags=flags; + dp->next=next; + memcpy(dp->buffer,buffer,len); + return dp; +} + +void ds_add_packet(demux_stream_t *ds,Demux_Packet* dp){ +// Demux_Packet* dp=new_demux_packet(len); // stream_read(stream,dp->buffer,len); // dp->pts=pts; //(float)pts/90000.0f; // dp->pos=pos; @@ -289,9 +326,9 @@ } void ds_read_packet(demux_stream_t *ds,stream_t *stream,int len,float pts,off_t pos,int flags){ - demux_packet_t* dp=new_demux_packet(len); + Demux_Packet* dp=new(zeromem) Demux_Packet(len); len=stream_read(stream,dp->buffer,len); - resize_demux_packet(dp,len); + dp->resize(len); dp->pts=pts; //(float)pts/90000.0f; dp->pos=pos; dp->flags=flags; @@ -327,7 +364,7 @@ check_pin("demuxer",ds->pin,DS_PIN); while(1){ if(ds->packs){ - demux_packet_t *p=ds->first; + Demux_Packet *p=ds->first; // copy useful data: ds->buffer=p->buffer; ds->buffer_pos=0; @@ -394,10 +431,10 @@ } void ds_free_packs(demux_stream_t *ds){ - demux_packet_t *dp=ds->first; + Demux_Packet *dp=ds->first; while(dp){ - demux_packet_t *dn=dp->next; - free_demux_packet(dp); + Demux_Packet *dn=dp->next; + delete dp; dp=dn; } if(ds->asf_packet){ @@ -417,15 +454,15 @@ } void ds_free_packs_until_pts(demux_stream_t *ds,float pts){ - demux_packet_t *dp=ds->first; + Demux_Packet *dp=ds->first; unsigned packs,bytes; packs=bytes=0; while(dp){ - demux_packet_t *dn=dp->next; + Demux_Packet *dn=dp->next; if(dp->pts >= pts) break; packs++; bytes+=dp->len; - free_demux_packet(dp); + delete dp; dp=dn; } if(!dp) @@ -455,17 +492,6 @@ ds->pts_bytes=0; } -demux_packet_t* clone_demux_packet(demux_packet_t* pack){ - demux_packet_t* dp=(demux_packet_t*)mp_malloc(sizeof(demux_packet_t)); -// while(pack->master) pack=pack->master; // find the master - memcpy(dp,pack,sizeof(demux_packet_t)); -// dp->next=NULL; -// dp->refcount=0; -// dp->master=pack; -// pack->refcount++; - return dp; -} - int ds_get_packet(demux_stream_t *ds,unsigned char **start){ while(1){ int len; @@ -727,10 +753,11 @@ unsigned i; if(demuxer->info) { + demuxer_info_t*dinfo = reinterpret_cast<demuxer_info_t*>(demuxer->info); for(i=0;i<INFOT_MAX;i++) - if(((demuxer_info_t *)demuxer->info)->id[i]) - delete ((demuxer_info_t *)demuxer->info)->id[i]; - delete demuxer->info; + if(dinfo->id[i]) + delete dinfo->id[i]; + delete dinfo; } } @@ -794,36 +821,3 @@ return id; } -demux_packet_t* new_demux_packet(int len){ - demux_packet_t* dp=(demux_packet_t*)mp_malloc(sizeof(demux_packet_t)); - dp->len=len; - dp->buffer=(unsigned char *)mp_malloc(len); - dp->next=NULL; - dp->pts=0; - dp->pos=0; - dp->flags=0; - return dp; -} - -void free_demux_packet(demux_packet_t* dp){ - delete dp->buffer; - delete dp; -} - -void resize_demux_packet(demux_packet_t* dp, int len) -{ - if(dp->len!=len) - { - if(len) - { - dp->buffer=(unsigned char *)mp_realloc(dp->buffer,len+8); - memset(dp->buffer+len,0,8); - } - else - { - if(dp->buffer) delete dp->buffer; - dp->buffer=NULL; - } - dp->len=len; - } -} Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpdemux/demuxer.h 2012-11-28 09:43:36 UTC (rev 470) @@ -53,15 +53,22 @@ DP_KEYFRAME =0x00000001UL }; /** Describes demuxer's packet */ -typedef struct demux_packet_st { - int len; /**< length of packet's data */ - float pts; /**< Presentation Time-Stamp (PTS) of data */ - off_t pos; /**< Position in index (AVI) or file (MPG) */ - unsigned char* buffer; /**< buffer of packet's data */ - int flags; /**< 1 - indicates keyframe, 0 - regular frame */ - struct demux_packet_st* next; /**< pointer to the next packet in chain */ -} demux_packet_t; +class Demux_Packet : public Opaque { + public: + Demux_Packet(unsigned len); + virtual ~Demux_Packet(); + void resize(unsigned newlen); + Demux_Packet* clone() const; + + unsigned len; /**< length of packet's data */ + float pts; /**< Presentation Time-Stamp (PTS) of data */ + off_t pos; /**< Position in index (AVI) or file (MPG) */ + unsigned char* buffer; /**< buffer of packet's data */ + unsigned flags; /**< 1 - indicates keyframe, 0 - regular frame */ + Demux_Packet* next; /**< pointer to the next packet in chain */ +}; + /** Describes interface to stream associated with this demuxer */ enum { DS_PIN=RND_NUMBER1+RND_CHAR1 @@ -84,12 +91,12 @@ /*---------------*/ int packs; /**< number of packets in buffer */ int bytes; /**< total bytes of packets in buffer */ - demux_packet_t* first; /**< read to current buffer from here */ - demux_packet_t* last; /**< append new packets from input stream to here */ - demux_packet_t* current; /**< needed for refcounting of the buffer */ + Demux_Packet* first; /**< read to current buffer from here */ + Demux_Packet* last; /**< append new packets from input stream to here */ + Demux_Packet* current; /**< needed for refcounting of the buffer */ struct demuxer_s* demuxer; /**< parent demuxer structure (stream handler) */ /* ---- asf ----- */ - demux_packet_t* asf_packet; /**< read asf fragments here */ + Demux_Packet* asf_packet; /**< read asf fragments here */ int asf_seq; /**< sequence id associated with asf_packet */ /*---------------*/ any_t* sh; /**< Stream header associated with this stream (@see st_header.h for detail) */ @@ -191,11 +198,6 @@ MPXP_Rc (*control)(const demuxer_t *d,int cmd,any_t*arg); }demuxer_driver_t; -demux_packet_t* new_demux_packet(int len); -void free_demux_packet(demux_packet_t* dp); -void resize_demux_packet(demux_packet_t* dp, int len); - -demux_packet_t* clone_demux_packet(demux_packet_t* pack); demux_stream_t* new_demuxer_stream(struct demuxer_s *demuxer,int id); demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id); void free_demuxer_stream(demux_stream_t *ds); @@ -203,7 +205,7 @@ void free_demuxer(demuxer_t *demuxer); #define FREE_DEMUXER(d) { free_demuxer(d); d=NULL; } -void ds_add_packet(demux_stream_t *ds,demux_packet_t* dp); +void ds_add_packet(demux_stream_t *ds,Demux_Packet* dp); void ds_read_packet(demux_stream_t *ds,stream_t *stream,int len,float pts,off_t pos,int flags); int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds); Modified: mplayerxp/libmpstream/s_tv.cpp =================================================================== --- mplayerxp/libmpstream/s_tv.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libmpstream/s_tv.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -81,7 +81,7 @@ int __FASTCALL__ demux_tv_fill_buffer(demuxer_t *demux, demux_stream_t *ds, tvi_handle_t *tvh) { - demux_packet_t* dp; + Demux_Packet* dp; u_int len; len = 0; @@ -94,7 +94,7 @@ { len = tvh->functions->get_audio_framesize(reinterpret_cast<priv_s*>(tvh->priv)); - dp=new_demux_packet(len); + dp=new(zeromem) Demux_Packet(len); dp->pts=tvh->functions->grab_audio_frame(reinterpret_cast<priv_s*>(tvh->priv), dp->buffer,len); ds_add_packet(demux->audio,dp); } @@ -105,7 +105,7 @@ TVI_CONTROL_IS_VIDEO, 0) == TVI_CONTROL_TRUE) { len = tvh->functions->get_video_framesize(reinterpret_cast<priv_s*>(tvh->priv)); - dp=new_demux_packet(len); + dp=new(zeromem) Demux_Packet(len); dp->pts=tvh->functions->grab_video_frame(reinterpret_cast<priv_s*>(tvh->priv), dp->buffer, len); ds_add_packet(demux->video,dp); } Modified: mplayerxp/libvo/x11_system.cpp =================================================================== --- mplayerxp/libvo/x11_system.cpp 2012-11-28 08:41:01 UTC (rev 469) +++ mplayerxp/libvo/x11_system.cpp 2012-11-28 09:43:36 UTC (rev 470) @@ -799,9 +799,9 @@ xclient.data.l[3] = 0; xclient.data.l[4] = 0; - XSendEvent (mDisplay, mRootWin, False, - SubstructureRedirectMask | SubstructureNotifyMask, - (XEvent *)&xclient); + ::XSendEvent( mDisplay, mRootWin, False, + SubstructureRedirectMask | SubstructureNotifyMask, + (XEvent *)&xclient); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-28 16:33:30
|
Revision: 477 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=477&view=rev Author: nickols_k Date: 2012-11-28 16:33:23 +0000 (Wed, 28 Nov 2012) Log Message: ----------- segfaults-- Modified Paths: -------------- mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpstream/stream.cpp Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-11-28 15:49:24 UTC (rev 476) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-11-28 16:33:23 UTC (rev 477) @@ -166,7 +166,7 @@ memcpy(sh_video->codec->outfmt,vprobe->pix_fmt,sizeof(vprobe->pix_fmt)); priv->mpvdec=vfm_find_driver(vfm); } - if(sh_video->codec) { + if(priv->mpvdec) { if(priv->mpvdec->init(sh_video,libinput)!=MPXP_Ok){ MSG_ERR(MSGTR_CODEC_CANT_INITV); delete sh_video->codec; Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-28 15:49:24 UTC (rev 476) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-28 16:33:23 UTC (rev 477) @@ -402,7 +402,6 @@ Demux_Packet* dp=ds->asf_packet; dp->resize(dp->len+len); stream_read(demux->stream,dp->buffer+dp->len,len); - dp->len+=len; } else { Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-11-28 15:49:24 UTC (rev 476) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-11-28 16:33:23 UTC (rev 477) @@ -399,7 +399,6 @@ } if(ds->asf_packet){ // mp_free unfinished .asf fragments: - delete ds->asf_packet->buffer; delete ds->asf_packet; ds->asf_packet=NULL; } @@ -429,7 +428,6 @@ { if(ds->asf_packet){ // mp_free unfinished .asf fragments: - delete ds->asf_packet->buffer; delete ds->asf_packet; ds->asf_packet=NULL; } Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-11-28 15:49:24 UTC (rev 476) +++ mplayerxp/libmpstream/stream.cpp 2012-11-28 16:33:23 UTC (rev 477) @@ -246,6 +246,7 @@ s->sector_size=STREAM_BUFFER_SIZE; s->buffer=new unsigned char [STREAM_BUFFER_SIZE]; if(s->buffer==NULL) { delete s; return NULL; } + s->buf_len=STREAM_BUFFER_SIZE; stream_reset(s); return s; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-29 05:19:17
|
Revision: 479 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=479&view=rev Author: nickols_k Date: 2012-11-29 05:19:09 +0000 (Thu, 29 Nov 2012) Log Message: ----------- allow select demuxer by name with using: -demuxer.type= Modified Paths: -------------- mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpdemux/demux_dv.cpp mplayerxp/libmpdemux/demux_film.cpp mplayerxp/libmpdemux/demux_fli.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mkv.cpp mplayerxp/libmpdemux/demux_mov.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_nsv.cpp mplayerxp/libmpdemux/demux_null.cpp mplayerxp/libmpdemux/demux_nuv.cpp mplayerxp/libmpdemux/demux_ogg.cpp mplayerxp/libmpdemux/demux_pva.cpp mplayerxp/libmpdemux/demux_rawaudio.cpp mplayerxp/libmpdemux/demux_rawvideo.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_realaud.cpp mplayerxp/libmpdemux/demux_roq.cpp mplayerxp/libmpdemux/demux_smjpeg.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demux_vqf.cpp mplayerxp/libmpdemux/demux_y4m.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/mplayerxp.cpp Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -230,6 +230,7 @@ extern const demuxer_driver_t demux_aiff = { + "aiff", "AIFF - Audio Interchange File Format parser", ".aiff", NULL, Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -729,6 +729,7 @@ extern const demuxer_driver_t demux_asf = { + "asf", "ASF - Advanced stream format v1 parser", ".asf", NULL, Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -1798,6 +1798,7 @@ extern const demuxer_driver_t demux_audio = { + "audio", "WAV/MP3 parser", ".wav", audio_opts, Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -1292,7 +1292,8 @@ stream_t* s; demuxer_t *od; s = new_ds_stream(demuxer->audio); - od = new_demuxer(s,DEMUXER_TYPE_OGG,-1,-2,-2); + od = new_demuxer(s,-1,-2,-2); + od->file_format=DEMUXER_TYPE_OGG; demux_ogg.probe(od); if(!demux_ogg.open(od)) { MSG_ERR("Can't open OGG demuxer\n"); @@ -1536,6 +1537,7 @@ extern const demuxer_driver_t demux_avi = { + "avi", "AVI - Audio Video Interleaved parser", ".avi", avi_opts, Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -313,6 +313,7 @@ extern const demuxer_driver_t demux_bmp = { + "bmp", "BMP - Bitmap amd other pictures parser", ".bmp", NULL, Modified: mplayerxp/libmpdemux/demux_dv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_dv.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_dv.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -240,6 +240,7 @@ } extern const demuxer_driver_t demux_dv = { + "dv", "DV video: IEC 61834 and SMPTE 314M", ".dv", NULL, // no options Modified: mplayerxp/libmpdemux/demux_film.cpp =================================================================== --- mplayerxp/libmpdemux/demux_film.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_film.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -449,6 +449,7 @@ extern const demuxer_driver_t demux_film = { + "film", "FILM (a.k.a. CPK) parser", ".cpk", NULL, Modified: mplayerxp/libmpdemux/demux_fli.cpp =================================================================== --- mplayerxp/libmpdemux/demux_fli.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_fli.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -202,6 +202,7 @@ extern const demuxer_driver_t demux_fli = { + "fli", "FLI parser", ".fli", NULL, Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -493,6 +493,7 @@ extern const demuxer_driver_t demux_lavf = { + "lavf", "libavformat - supports many formats, requires libavformat", ".xxx", lavfdopts_conf, Modified: mplayerxp/libmpdemux/demux_mkv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mkv.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_mkv.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -4058,6 +4058,7 @@ extern const demuxer_driver_t demux_mkv = { + "mkv", "Matroska MKV parser", ".mkv", NULL, Modified: mplayerxp/libmpdemux/demux_mov.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mov.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_mov.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -2104,6 +2104,7 @@ extern const demuxer_driver_t demux_mov = { + "mov", "QuickTime MOV parser", ".mov", NULL, Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -854,6 +854,7 @@ extern const demuxer_driver_t demux_mpgps = { + "mpg", "MPG/VOB PS (Packet stream) parser", ".mpg", NULL, Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -880,6 +880,7 @@ extern const demuxer_driver_t demux_mpxpav64 = { + "mpxpav64", "MPXPAV64 - MPlayerXP's AudioVideo64 parser", ".mpxp", NULL, Modified: mplayerxp/libmpdemux/demux_nsv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nsv.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_nsv.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -357,6 +357,7 @@ extern const demuxer_driver_t demux_nsv = { + "nsv", "Nullsoft Streaming Video demuxer", ".nsv", NULL, Modified: mplayerxp/libmpdemux/demux_null.cpp =================================================================== --- mplayerxp/libmpdemux/demux_null.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_null.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -43,6 +43,7 @@ extern const demuxer_driver_t demux_null = { + "null", "NULL parser", "...", null_conf, Modified: mplayerxp/libmpdemux/demux_nuv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nuv.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_nuv.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -336,6 +336,7 @@ extern const demuxer_driver_t demux_nuv = { + "nuv", "NuppelVideo 0.05 parser", ".nuv", NULL, Modified: mplayerxp/libmpdemux/demux_ogg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ogg.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_ogg.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -1238,7 +1238,8 @@ // Create the ds_stream and the ogg demuxer s = new_ds_stream(demuxer->audio); - od = new_demuxer(s,DEMUXER_TYPE_OGG,0,-2,-2); + od = new_demuxer(s,0,-2,-2); + od->file_format=DEMUXER_TYPE_OGG; /// Add the header packets in the ogg demuxer audio stream // Initial header @@ -1471,6 +1472,7 @@ extern const demuxer_driver_t demux_ogg = { + "ogg", "OGG/Vorbis parser", ".ogg", NULL, Modified: mplayerxp/libmpdemux/demux_pva.cpp =================================================================== --- mplayerxp/libmpdemux/demux_pva.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_pva.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -513,6 +513,7 @@ extern const demuxer_driver_t demux_pva = { + "pva", "PVA (for DVB boards) parser", ".pva", NULL, Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -118,6 +118,7 @@ extern const demuxer_driver_t demux_rawaudio = { + "rawaudio", "RAW audio parser", ".rawaudio", rawaudio_conf, Modified: mplayerxp/libmpdemux/demux_rawvideo.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -152,6 +152,7 @@ extern const demuxer_driver_t demux_rawvideo = { + "rawvideo", "RAW video parser", ".rawvideo", rawvideo_conf, Modified: mplayerxp/libmpdemux/demux_real.cpp =================================================================== --- mplayerxp/libmpdemux/demux_real.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_real.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -1604,6 +1604,7 @@ extern const demuxer_driver_t demux_real = { + "real", "Real media parser", ".rm", NULL, Modified: mplayerxp/libmpdemux/demux_realaud.cpp =================================================================== --- mplayerxp/libmpdemux/demux_realaud.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_realaud.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -308,8 +308,9 @@ return MPXP_Unknown; } -extern const demuxer_driver_t demux_ra = +extern const demuxer_driver_t demux_realaud = { + "realaud", "Real audio parser", ".ra", NULL, Modified: mplayerxp/libmpdemux/demux_roq.cpp =================================================================== --- mplayerxp/libmpdemux/demux_roq.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_roq.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -265,6 +265,7 @@ extern const demuxer_driver_t demux_roq = { + "roq", "RoQ parser", ".roq", NULL, Modified: mplayerxp/libmpdemux/demux_smjpeg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_smjpeg.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_smjpeg.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -179,6 +179,7 @@ extern const demuxer_driver_t demux_smjpeg = { + "smjpeg", "SMJPEG parser", ".smjpeg", NULL, Modified: mplayerxp/libmpdemux/demux_ts.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ts.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_ts.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -3293,6 +3293,7 @@ extern const demuxer_driver_t demux_mpgts = { + "ts", "MPEG2 Transport Streams parser", ".mts", NULL, Modified: mplayerxp/libmpdemux/demux_ty.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ty.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_ty.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -875,6 +875,7 @@ /* "Christopher R. Wingert" */ extern const demuxer_driver_t demux_ty = { + "tivo", "TiVo demuxer", ".tivo", NULL, Modified: mplayerxp/libmpdemux/demux_viv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_viv.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_viv.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -770,6 +770,7 @@ extern const demuxer_driver_t demux_vivo = { + "vivo", "VIVO parser", ".vivo", vivo_conf, Modified: mplayerxp/libmpdemux/demux_vqf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_vqf.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_vqf.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -232,6 +232,7 @@ extern const demuxer_driver_t demux_vqf = { + "vqf", "TwinVQ - Transform-domain Weighted Interleave Vector Quantization", ".vqf", NULL, Modified: mplayerxp/libmpdemux/demux_y4m.cpp =================================================================== --- mplayerxp/libmpdemux/demux_y4m.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demux_y4m.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -282,6 +282,7 @@ extern const demuxer_driver_t demux_y4m = { + "y4m", "YUV4MPEG2 parser", ".y4m", NULL, Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -38,7 +38,7 @@ extern const demuxer_driver_t demux_mov; extern const demuxer_driver_t demux_mkv; extern const demuxer_driver_t demux_vivo; -extern const demuxer_driver_t demux_ra; +extern const demuxer_driver_t demux_realaud; extern const demuxer_driver_t demux_real; extern const demuxer_driver_t demux_fli; extern const demuxer_driver_t demux_film; @@ -68,7 +68,7 @@ &demux_mov, &demux_mkv, &demux_vivo, - &demux_ra, + &demux_realaud, &demux_real, &demux_fli, &demux_film, @@ -142,7 +142,7 @@ return ds; } -demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id){ +demuxer_t* new_demuxer(stream_t *stream,int a_id,int v_id,int s_id){ demuxer_t *d=new(zeromem) demuxer_t; rnd_fill(d->antiviral_hole,reinterpret_cast<long>(&d->pin)-reinterpret_cast<long>(&d->antiviral_hole)); d->pin=DEMUX_PIN; @@ -156,7 +156,6 @@ d->audio=new_demuxer_stream(d,a_id); d->video=new_demuxer_stream(d,v_id); d->sub=new_demuxer_stream(d,s_id); - d->file_format=type; d->info=new(zeromem) demuxer_info_t; stream_reset(stream); stream_seek(stream,stream->start_pos); @@ -503,9 +502,9 @@ // ==================================================================== struct demux_conf { - char* audio_stream; - char* sub_stream; - int demuxer_type, audio_demuxer_type, sub_demuxer_type; + const char* audio_stream; + const char* sub_stream; + const char* type; }; static demux_conf demux_conf; @@ -530,18 +529,45 @@ { INFOT_COMMENTS, SCTRL_TXT_GET_STREAM_COMMENT }, { INFOT_MIME, SCTRL_TXT_GET_STREAM_MIME } }; -static demuxer_t* demux_open_stream(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id) + +static const demuxer_driver_t* demux_find_driver(const char *name) { + unsigned i=0; + for(;ddrivers[i]!=&demux_null;i++) + if(strcmp(name,ddrivers[i]->short_name)==0) return ddrivers[i]; + return NULL; +} + +static demuxer_t* demux_open_stream(stream_t *stream,int audio_id,int video_id,int dvdsub_id) { unsigned i; demuxer_t *demuxer=NULL,*new_demux=NULL; demux_aid_vid_mismatch = 0; i=0; + if(demux_conf.type) { + const demuxer_driver_t* drv; + drv=demux_find_driver(demux_conf.type); + if(!drv) { + MSG_ERR("Can't find demuxer driver: '%s'\n",demux_conf.type); + goto err_exit; + } + MSG_V("Forcing %s ... ",drv->name); + /* don't remove it from loop!!! (for initializing) */ + demuxer = new_demuxer(stream,audio_id,video_id,dvdsub_id); + stream_reset(demuxer->stream); + stream_seek(demuxer->stream,demuxer->stream->start_pos); + if(drv->probe(demuxer)!=MPXP_Ok) { + MSG_ERR("Can't probe stream with driver: '%s'\n",demux_conf.type); + goto err_exit; + } + demuxer->driver = drv; + goto force_driver; + } again: for(;ddrivers[i]!=&demux_null;i++) { MSG_V("Probing %s ... ",ddrivers[i]->name); /* don't remove it from loop!!! (for initializing) */ - demuxer = new_demuxer(stream,DEMUXER_TYPE_UNKNOWN,audio_id,video_id,dvdsub_id); + demuxer = new_demuxer(stream,audio_id,video_id,dvdsub_id); stream_reset(demuxer->stream); stream_seek(demuxer->stream,demuxer->stream->start_pos); if(ddrivers[i]->probe(demuxer)==MPXP_Ok) { @@ -553,16 +579,18 @@ free_demuxer(demuxer); demuxer=NULL; } if(!demuxer || !demuxer->driver) { +err_exit: MSG_ERR(MSGTR_FormatNotRecognized); if(demuxer) { free_demuxer(demuxer); demuxer=NULL; } return NULL; } - +force_driver: if(!(new_demux=demuxer->driver->open(demuxer))) { MSG_ERR("Can't open stream with '%s'\n", demuxer->driver->name); demuxer->driver=NULL; i++; - goto again; + if(demux_conf.type) goto err_exit; + else goto again; } demuxer=new_demux; MSG_OK("Using: %s\n",demuxer->driver->name); @@ -579,7 +607,7 @@ return demuxer; } -demuxer_t* demux_open(stream_t *vs,int file_format,int audio_id,int video_id,int dvdsub_id){ +demuxer_t* demux_open(stream_t *vs,int audio_id,int video_id,int dvdsub_id){ stream_t *as = NULL,*ss = NULL; demuxer_t *vd,*ad = NULL,*sd = NULL; int afmt = 0,sfmt = 0; @@ -603,18 +631,18 @@ } } - vd = demux_open_stream(vs,demux_conf.demuxer_type ? demux_conf.demuxer_type : file_format,demux_conf.audio_stream ? -2 : audio_id,video_id, demux_conf.sub_stream ? -2 : dvdsub_id); + vd = demux_open_stream(vs,audio_id,video_id,dvdsub_id); if(!vd) return NULL; if(as) { - ad = demux_open_stream(as,demux_conf.audio_demuxer_type ? demux_conf.audio_demuxer_type : afmt,audio_id,-2,-2); + ad = demux_open_stream(as,audio_id,-2,-2); if(!ad) MSG_WARN("Failed to open audio demuxer: %s\n",demux_conf.audio_stream); else if(ad->audio->sh && ((sh_audio_t*)ad->audio->sh)->wtag == 0x55) // MP3 m_config_set_flag(MPXPCtx->mconfig,"mp3.hr-seek",1); // Enable high res seeking } if(ss) { - sd = demux_open_stream(ss,demux_conf.sub_demuxer_type ? demux_conf.sub_demuxer_type : sfmt,-2,-2,dvdsub_id); + sd = demux_open_stream(ss,-2,-2,dvdsub_id); if(!sd) MSG_WARN("Failed to open subtitles demuxer: %s\n",demux_conf.sub_stream); } @@ -732,9 +760,7 @@ static const config_t demux_opts[] = { { "audiofile", &demux_conf.audio_stream, CONF_TYPE_STRING, 0, 0, 0, "forces reading of audio-stream from other file" }, { "subfile", &demux_conf.sub_stream, CONF_TYPE_STRING, 0, 0, 0, "forces reading of subtitles from other file" }, - { "type", &demux_conf.demuxer_type, CONF_TYPE_INT, CONF_RANGE, 1, DEMUXER_TYPE_MAX, "forces demuxer by given number" }, - { "audio", &demux_conf.audio_demuxer_type, CONF_TYPE_INT, CONF_RANGE, 1, DEMUXER_TYPE_MAX, "forces using of audio-demuxer" }, - { "sub", &demux_conf.sub_demuxer_type, CONF_TYPE_INT, CONF_RANGE, 1, DEMUXER_TYPE_MAX, "forces using of subtitle-demuxer" }, + { "type", &demux_conf.type, CONF_TYPE_STRING, 0, 0, 0, "forces demuxer by given name" }, { NULL, NULL, 0, 0, 0, 0, NULL} }; Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/libmpdemux/demuxer.h 2012-11-29 05:19:09 UTC (rev 479) @@ -153,8 +153,9 @@ /** Demuxer's driver interface */ typedef struct demuxer_driver_s { - const char * name; /**< Name of driver ("Matroska MKV parser") */ - const char * defext; /**< Default file extension for this movie type */ + const char* short_name; /**< for forcing through comand line */ + const char* name; /**< Name of driver ("Matroska MKV parser") */ + const char* defext; /**< Default file extension for this movie type */ const config_t* options;/**< Optional: MPlayerXP's option related */ /** Probing stream. * @param d _this demuxer @@ -190,7 +191,7 @@ }demuxer_driver_t; demux_stream_t* new_demuxer_stream(demuxer_t *demuxer,int id); -demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id); +demuxer_t* new_demuxer(stream_t *stream,int a_id,int v_id,int s_id); void free_demuxer_stream(demux_stream_t *ds); void free_demuxer(demuxer_t *demuxer); @@ -271,6 +272,6 @@ extern int demuxer_switch_video(const demuxer_t *, int id); extern int demuxer_switch_subtitle(const demuxer_t *, int id); -demuxer_t* demux_open(stream_t *stream,int file_format,int aid,int vid,int sid); +demuxer_t* demux_open(stream_t *stream,int aid,int vid,int sid); #endif Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-11-28 16:54:29 UTC (rev 478) +++ mplayerxp/mplayerxp.cpp 2012-11-29 05:19:09 UTC (rev 479) @@ -1858,7 +1858,7 @@ MP_UNIT("demux_open"); - if(!input_state.after_dvdmenu) MPXPSys->assign_demuxer(demux_open(stream,file_format,mp_conf.audio_id,mp_conf.video_id,mp_conf.dvdsub_id)); + if(!input_state.after_dvdmenu) MPXPSys->assign_demuxer(demux_open(stream,mp_conf.audio_id,mp_conf.video_id,mp_conf.dvdsub_id)); if(!MPXPSys->demuxer()) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR input_state.after_dvdmenu=0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-29 09:44:51
|
Revision: 482 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=482&view=rev Author: nickols_k Date: 2012-11-29 09:44:34 +0000 (Thu, 29 Nov 2012) Log Message: ----------- implement class Video_Output as main module of Video Subsystem Modified Paths: -------------- mplayerxp/libao2/ao_wav.cpp mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpsub/find_sub.cpp mplayerxp/libmpsub/spudec.cpp mplayerxp/libmpsub/spudec.h mplayerxp/libmpsub/subreader.h mplayerxp/libvo/sub.cpp mplayerxp/libvo/sub.h mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out.h mplayerxp/libvo/video_out_internal.h mplayerxp/libvo/vo_fbdev.cpp mplayerxp/libvo/vo_null.cpp mplayerxp/libvo/vo_opengl.cpp mplayerxp/libvo/vo_sdl.cpp mplayerxp/libvo/vo_vesa.cpp mplayerxp/libvo/vo_x11.cpp mplayerxp/libvo/vo_xv.cpp mplayerxp/libvo/x11_system.cpp mplayerxp/libvo/x11_system.h mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/postproc/libmenu/menu.cpp mplayerxp/postproc/vf.cpp mplayerxp/postproc/vf.h mplayerxp/postproc/vf_1bpp.cpp mplayerxp/postproc/vf_2xsai.cpp mplayerxp/postproc/vf_aspect.cpp mplayerxp/postproc/vf_delogo.cpp mplayerxp/postproc/vf_denoise3d.cpp mplayerxp/postproc/vf_dint.cpp mplayerxp/postproc/vf_down3dright.cpp mplayerxp/postproc/vf_expand.cpp mplayerxp/postproc/vf_flip.cpp mplayerxp/postproc/vf_format.cpp mplayerxp/postproc/vf_menu.cpp mplayerxp/postproc/vf_mirror.cpp mplayerxp/postproc/vf_noise.cpp mplayerxp/postproc/vf_ow.cpp mplayerxp/postproc/vf_palette.cpp mplayerxp/postproc/vf_panscan.cpp mplayerxp/postproc/vf_perspective.cpp mplayerxp/postproc/vf_pp.cpp mplayerxp/postproc/vf_raw.cpp mplayerxp/postproc/vf_rectangle.cpp mplayerxp/postproc/vf_rgb2bgr.cpp mplayerxp/postproc/vf_rotate.cpp mplayerxp/postproc/vf_scale.cpp mplayerxp/postproc/vf_smartblur.cpp mplayerxp/postproc/vf_softpulldown.cpp mplayerxp/postproc/vf_test.cpp mplayerxp/postproc/vf_unsharp.cpp mplayerxp/postproc/vf_vo.cpp mplayerxp/postproc/vf_yuvcsp.cpp mplayerxp/postproc/vf_yuy2.cpp mplayerxp/postproc/vf_yvu9.cpp mplayerxp/xmpcore/xmp_vplayer.cpp Modified: mplayerxp/libao2/ao_wav.cpp =================================================================== --- mplayerxp/libao2/ao_wav.cpp 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libao2/ao_wav.cpp 2012-11-29 09:44:34 UTC (rev 482) @@ -220,7 +220,6 @@ } // return: how many bytes can be played without blocking -extern vo_data_t* vo_data; static unsigned get_space(const ao_data_t* ao){ priv_t* priv=reinterpret_cast<priv_t*>(ao->priv); float pts=dae_played_frame(xp_core->video).v_pts; Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-11-29 09:44:34 UTC (rev 482) @@ -313,7 +313,7 @@ if(frame->flags) return 0; update_subtitle(sh_video,frame->pts,mpi->xp_idx); - vo_flush_page(vo_data,dae_curr_vdecoded(xp_core)); + vo_data->flush_page(dae_curr_vdecoded(xp_core)); t2=GetTimer()-t2; tt=t2*0.000001f; @@ -375,7 +375,7 @@ MP_UNIT("spudec"); spudec_now_pts(vo_data->spudec,90000*v_pts); if(spudec_visible(vo_data->spudec)) { - vo_draw_spudec_direct(vo_data,xp_idx); + vo_data->draw_spudec_direct(xp_idx); } else { spudec_heartbeat(vo_data->spudec,90000*v_pts); if (vo_data->vobsub) { @@ -393,7 +393,7 @@ } } /* detect wether the sub has changed or not */ - if(spudec_changed(vo_data->spudec)) vo_draw_spudec_direct(vo_data,xp_idx); + if(spudec_changed(vo_data->spudec)) vo_data->draw_spudec_direct(xp_idx); MP_UNIT(NULL); } } @@ -493,13 +493,13 @@ // autodetect flipping if(vo_conf.flip==0){ - vo_FLIP_UNSET(vo_data); + vo_data->FLIP_UNSET(); if(sh->codec->outflags[j]&CODECS_FLAG_FLIP) if(!(sh->codec->outflags[j]&CODECS_FLAG_NOFLIP)) - vo_FLIP_SET(vo_data); + vo_data->FLIP_SET(); } - if(vo_data->flags&VFCAP_FLIPPED) vo_FLIP_REVERT(vo_data); - if(vo_FLIP(vo_data) && !(vo_data->flags&VFCAP_FLIP)){ + if(vo_data->flags&VFCAP_FLIPPED) vo_data->FLIP_REVERT(); + if(vo_data->FLIP() && !(vo_data->flags&VFCAP_FLIP)){ // we need to flip, but no flipping filter avail. sh->vfilter=vf=vf_open_filter(vf,sh,"flip",NULL,libinput); } @@ -539,7 +539,7 @@ if(_w<screen_size_x || vo_conf.image_zoom>8){ screen_size_y=(int)((float)screen_size_x*(1.0/sh->aspect)); screen_size_y+=screen_size_y%2; // round - if(screen_size_y<sh->src_h) // Do not downscale verticaly + if(unsigned(screen_size_y)<sh->src_h) // Do not downscale verticaly screen_size_y=sh->src_h; } else screen_size_x=_w; // keep new width } else { Modified: mplayerxp/libmpsub/find_sub.cpp =================================================================== --- mplayerxp/libmpsub/find_sub.cpp 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libmpsub/find_sub.cpp 2012-11-29 09:44:34 UTC (rev 482) @@ -20,9 +20,8 @@ static unsigned long nosub_range_start=ULONG_MAX; static unsigned long nosub_range_end=ULONG_MAX; -void find_sub(subtitle* subtitles,unsigned long key,any_t*vo_data){ +void find_sub(subtitle* subtitles,unsigned long key,Video_Output*vo){ int i,j; - vo_data_t*vo=reinterpret_cast<vo_data_t*>(vo_data); if ( !subtitles ) return; Modified: mplayerxp/libmpsub/spudec.cpp =================================================================== --- mplayerxp/libmpsub/spudec.cpp 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libmpsub/spudec.cpp 2012-11-29 09:44:34 UTC (rev 482) @@ -606,7 +606,7 @@ } } -void __FASTCALL__ spudec_draw(any_t*self, draw_osd_f draw_alpha,any_t*vo) +void __FASTCALL__ spudec_draw(any_t*self, draw_osd_f draw_alpha,const Video_Output*vo) { spudec_handle_t *spu = (spudec_handle_t *)self; if (spu->start_pts <= spu->now_pts && spu->now_pts < spu->end_pts && spu->image) @@ -750,7 +750,7 @@ sws_freeContext(ctx); } -void __FASTCALL__ spudec_draw_scaled(any_t*me, unsigned int dxs, unsigned int dys, draw_osd_f draw_alpha,any_t*vo) +void __FASTCALL__ spudec_draw_scaled(any_t*me, unsigned int dxs, unsigned int dys, draw_osd_f draw_alpha,const Video_Output*vo) { spudec_handle_t *spu = (spudec_handle_t *)me; scale_pixel *table_x; Modified: mplayerxp/libmpsub/spudec.h =================================================================== --- mplayerxp/libmpsub/spudec.h 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libmpsub/spudec.h 2012-11-29 09:44:34 UTC (rev 482) @@ -8,11 +8,16 @@ extern int spu_aamode; extern float spu_gaussvar; +namespace mpxp { + class Video_Output; +} +using namespace mpxp; + void __FASTCALL__ spudec_heartbeat(any_t*__self, unsigned int pts100); void __FASTCALL__ spudec_now_pts(any_t*__self, unsigned int pts100); void __FASTCALL__ spudec_assemble(any_t*__self, unsigned char *packet, unsigned int len, unsigned int pts100); -void __FASTCALL__ spudec_draw(any_t*__self, draw_osd_f draw_alpha,any_t* vo); -void __FASTCALL__ spudec_draw_scaled(any_t*__self, unsigned int dxs, unsigned int dys,draw_osd_f draw_alpha,any_t* vo); +void __FASTCALL__ spudec_draw(any_t*__self, draw_osd_f draw_alpha,const Video_Output* vo); +void __FASTCALL__ spudec_draw_scaled(any_t*__self, unsigned int dxs, unsigned int dys,draw_osd_f draw_alpha,const Video_Output* vo); void __FASTCALL__ spudec_update_palette(any_t*__self,const unsigned int *palette); any_t* __FASTCALL__ spudec_new_scaled(unsigned int *palette, unsigned int frame_width, unsigned int frame_height); any_t* __FASTCALL__ spudec_new_scaled_vobsub(unsigned int *palette, unsigned int *cuspal, unsigned int custom, unsigned int frame_width, unsigned int frame_height); Modified: mplayerxp/libmpsub/subreader.h =================================================================== --- mplayerxp/libmpsub/subreader.h 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libmpsub/subreader.h 2012-11-29 09:44:34 UTC (rev 482) @@ -1,6 +1,11 @@ #ifndef __MPLAYER_SUBREADER_H #define __MPLAYER_SUBREADER_H +namespace mpxp { + class Video_Output; +} +using namespace mpxp; + extern int sub_uses_time; extern int sub_errs; extern int sub_num; // number of subtitle structs @@ -37,7 +42,7 @@ extern void list_sub_file(subtitle* subs); extern void dump_mpsub(subtitle* subs, float fps); extern void sub_free(subtitle* subs ); -extern void find_sub(subtitle* subtitles,unsigned long key,any_t*vo_data); +extern void find_sub(subtitle* subtitles,unsigned long key,Video_Output*vo_data); extern void subcp_open (void); extern void subcp_close (void); Modified: mplayerxp/libvo/sub.cpp =================================================================== --- mplayerxp/libvo/sub.cpp 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libvo/sub.cpp 2012-11-29 09:44:34 UTC (rev 482) @@ -16,6 +16,8 @@ #define MSGT_CLASS MSGT_OSD #include "mp_msg.h" +namespace mpxp { + static const char * __sub_osd_names[]={ "Seekbar", "Play", @@ -64,7 +66,7 @@ } // renders the buffer -static void vo_draw_text_from_buffer(any_t*vo,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ +static void vo_draw_text_from_buffer(const Video_Output*vo,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ if (obj->allocated > 0) { draw_alpha(vo,idx, obj->bbox.x1,obj->bbox.y1, @@ -97,22 +99,20 @@ } // return the real height of a char: -inline static int __FASTCALL__ get_height(vo_data_t*vo,int c,int h){ +inline static int __FASTCALL__ get_height(const Video_Output*vo,int c,int h){ int font; if ((font=vo->font->font[c])>=0) if(h<vo->font->pic_a[font]->h) h=vo->font->pic_a[font]->h; return h; } -int __FASTCALL__ get_osd_height(any_t*v,int c,int h) +int __FASTCALL__ get_osd_height(const Video_Output*vo,int c,int h) { - vo_data_t* vo=(vo_data_t*)v; return vo->font?get_height(vo,c,h):0; } -static void __FASTCALL__ vo_update_text_osd(any_t*v,mp_osd_obj_t* obj,int dxs,int dys){ - vo_data_t* vo=(vo_data_t*)v; - unsigned char *cp=(unsigned char *)vo->osd_text; +static void __FASTCALL__ vo_update_text_osd(const Video_Output*vo,mp_osd_obj_t* obj,int dxs,int dys){ + const unsigned char *cp=(const unsigned char *)vo->osd_text; int x=20; int h=0; @@ -133,9 +133,8 @@ } -static void __FASTCALL__ vo_draw_text_osd(any_t*v,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ - vo_data_t* vo=(vo_data_t*)v; - unsigned char *cp=(unsigned char *)vo->osd_text; +static void __FASTCALL__ vo_draw_text_osd(const Video_Output*vo,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ + const unsigned char *cp=(const unsigned char *)vo->osd_text; int font; int x=obj->x; @@ -161,8 +160,7 @@ // // the above schema is rescalled to n=elems bars -static void __FASTCALL__ vo_update_text_progbar(any_t*v,mp_osd_obj_t* obj,int dxs,int dys){ - vo_data_t* vo=(vo_data_t*)v; +static void __FASTCALL__ vo_update_text_progbar(const Video_Output*vo,mp_osd_obj_t* obj,int dxs,int dys){ obj->flags|=OSDFLAG_CHANGED|OSDFLAG_VISIBLE; if(vo->osd_progbar_type<0 || !vo->font){ @@ -193,8 +191,7 @@ } -static void __FASTCALL__ vo_draw_text_progbar(any_t*v,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ - vo_data_t* vo=(vo_data_t*)v; +static void __FASTCALL__ vo_draw_text_progbar(const Video_Output*vo,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ unsigned char *s; unsigned char *sa; int i,w,h,st,mark; @@ -277,8 +274,7 @@ // vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)) -static void __FASTCALL__ vo_update_text_sub(any_t*v,mp_osd_obj_t* obj,int dxs,int dys){ - vo_data_t* vo=reinterpret_cast<vo_data_t*>(v); +static void __FASTCALL__ vo_update_text_sub(const Video_Output*vo,mp_osd_obj_t* obj,int dxs,int dys){ char *t; int c,i,j,l,font; int len; @@ -385,8 +381,7 @@ } -static void __FASTCALL__ vo_draw_text_sub(any_t*v,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ - vo_data_t* vo=(vo_data_t*)v; +static void __FASTCALL__ vo_draw_text_sub(const Video_Output*vo,unsigned idx,mp_osd_obj_t* obj,draw_osd_f draw_alpha){ int i,j,c,x,l,font; int y=obj->y; @@ -426,8 +421,7 @@ vo_osd_list=NULL; } -int __FASTCALL__ vo_update_osd(any_t*v,int dxs,int dys){ - vo_data_t* vo=(vo_data_t*)v; +int __FASTCALL__ vo_update_osd(const Video_Output*vo,int dxs,int dys){ mp_osd_obj_t* obj=vo_osd_list; int chg=0; while(obj){ @@ -509,10 +503,9 @@ new_osd_obj(OSDTYPE_DVDNAV); } -void __FASTCALL__ vo_remove_text(any_t*v,unsigned idx,int dxs,int dys,clear_osd_f f_remove){ - vo_data_t* vo=(vo_data_t*)v; +void __FASTCALL__ vo_remove_text(const Video_Output*vo,unsigned idx,int dxs,int dys,clear_osd_f f_remove){ mp_osd_obj_t* obj=vo_osd_list; - vo_update_osd(v,dxs,dys); + vo_update_osd(vo,dxs,dys); while(obj){ if(((obj->flags&OSDFLAG_CHANGED) || (obj->flags&OSDFLAG_VISIBLE) || (obj->cleared_frames>=0)) && @@ -520,7 +513,6 @@ int w=obj->old_bbox.x2-obj->old_bbox.x1; int h=obj->old_bbox.y2-obj->old_bbox.y1; if(w>0 && h>0){ - vo->osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack f_remove(vo,idx,obj->old_bbox.x1,obj->old_bbox.y1,w,h); } // obj->flags&=~OSDFLAG_OLD_BBOX; @@ -534,27 +526,24 @@ } } -void __FASTCALL__ vo_draw_spudec(any_t*v,unsigned idx,int dxs,int dys,draw_osd_f draw_alpha){ +void __FASTCALL__ vo_draw_spudec(const Video_Output*vo,unsigned idx,int dxs,int dys,draw_osd_f draw_alpha){ UNUSED(idx); - vo_data_t*vo=(vo_data_t*)v; - spudec_draw_scaled(vo->spudec, dxs, dys, draw_alpha,v); // FIXME + spudec_draw_scaled(vo->spudec, dxs, dys, draw_alpha,vo); // FIXME } -void __FASTCALL__ vo_draw_text(any_t*v,unsigned idx,int dxs,int dys,draw_osd_f draw_alpha){ - vo_data_t* vo=(vo_data_t*)v; +void __FASTCALL__ vo_draw_text(const Video_Output*vo,unsigned idx,int dxs,int dys,draw_osd_f draw_alpha){ mp_osd_obj_t* obj=vo_osd_list; - vo_update_osd(v,dxs,dys); + vo_update_osd(vo,dxs,dys); while(obj){ if(obj->flags&OSDFLAG_VISIBLE){ obj->cleared_frames=0; - vo->osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack switch(obj->type){ case OSDTYPE_SPU: - spudec_draw_scaled(vo->spudec, dxs, dys, draw_alpha,v); // FIXME + spudec_draw_scaled(vo->spudec, dxs, dys, draw_alpha,vo); // FIXME break; case OSDTYPE_VOBSUB: - if(vo->spudec) spudec_draw_scaled(vo->spudec, dxs, dys, draw_alpha,v); // FIXME + if(vo->spudec) spudec_draw_scaled(vo->spudec, dxs, dys, draw_alpha,vo); // FIXME break; case OSDTYPE_OSD: vo_draw_text_osd(vo,idx,obj,draw_alpha); @@ -607,3 +596,4 @@ } return 0; } +} // namespace mpxp \ No newline at end of file Modified: mplayerxp/libvo/sub.h =================================================================== --- mplayerxp/libvo/sub.h 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libvo/sub.h 2012-11-29 09:44:34 UTC (rev 482) @@ -3,102 +3,106 @@ #include <inttypes.h> #include "osd_render.h" -typedef struct mp_osd_bbox_s { - int x1,y1,x2,y2; -} mp_osd_bbox_t; +namespace mpxp { + typedef struct mp_osd_bbox_s { + int x1,y1,x2,y2; + } mp_osd_bbox_t; -enum { - OSDTYPE_OSD =1, - OSDTYPE_SUBTITLE =2, - OSDTYPE_PROGBAR =3, - OSDTYPE_SPU =4, - OSDTYPE_VOBSUB =5, - OSDTYPE_DVDNAV =6, - OSDTYPE_TELETEXT =7 -}; + enum { + OSDTYPE_OSD =1, + OSDTYPE_SUBTITLE =2, + OSDTYPE_PROGBAR =3, + OSDTYPE_SPU =4, + OSDTYPE_VOBSUB =5, + OSDTYPE_DVDNAV =6, + OSDTYPE_TELETEXT =7 + }; -enum { - OSDFLAG_VISIBLE =1, - OSDFLAG_CHANGED =2, - OSDFLAG_BBOX =4, - OSDFLAG_OLD_BBOX =8, - OSDFLAG_FORCE_UPDATE=16 -}; + enum { + OSDFLAG_VISIBLE =1, + OSDFLAG_CHANGED =2, + OSDFLAG_BBOX =4, + OSDFLAG_OLD_BBOX=8, + OSDFLAG_FORCE_UPDATE=16 + }; -enum { - MAX_UCS =1600, - MAX_UCSLINES =16 -}; -typedef struct mp_osd_obj_s { - struct mp_osd_obj_s* next; - unsigned char type; - unsigned char alignment; // 2 bits: x;y percents, 2 bits: x;y relative to parent; 2 bits: alignment left/right/center - unsigned short flags; - int x,y; - int dxs,dys; - mp_osd_bbox_t bbox; // bounding box - mp_osd_bbox_t old_bbox; // the renderer will save bbox here - int cleared_frames; // The number of frames that has been cleared from old OSD, -1 = don't clear - union { - struct { - const any_t* sub; // value of vo_sub at last update - int utbl[MAX_UCS+1]; // subtitle text - int xtbl[MAX_UCSLINES]; // x positions - int lines; // no. of lines - } subtitle; - struct { - int elems; - } progbar; - } params; - int stride; - int allocated; - unsigned char *alpha_buffer; - unsigned char *bitmap_buffer; -} mp_osd_obj_t; + enum { + MAX_UCS =1600, + MAX_UCSLINES =16 + }; -enum { - OSD_PLAY =0x01, - OSD_PAUSE =0x02, - OSD_STOP =0x03, - OSD_REW =0x04, - OSD_FFW =0x05, - OSD_CLOCK =0x06, - OSD_CONTRAST =0x07, - OSD_SATURATION =0x08, - OSD_VOLUME =0x09, - OSD_BRIGHTNESS =0x0A, - OSD_HUE =0x0B, - OSD_DVDMENU =0x0C, + typedef struct mp_osd_obj_s { + struct mp_osd_obj_s* next; + unsigned char type; + unsigned char alignment; // 2 bits: x;y percents, 2 bits: x;y relative to parent; 2 bits: alignment left/right/center + unsigned short flags; + int x,y; + int dxs,dys; + mp_osd_bbox_t bbox; // bounding box + mp_osd_bbox_t old_bbox; // the renderer will save bbox here + int cleared_frames; // The number of frames that has been cleared from old OSD, -1 = don't clear + union { + struct { + const any_t* sub; // value of vo_sub at last update + int utbl[MAX_UCS+1]; // subtitle text + int xtbl[MAX_UCSLINES]; // x positions + int lines; // no. of lines + } subtitle; + struct { + int elems; + } progbar; + } params; + int stride; + int allocated; + unsigned char *alpha_buffer; + unsigned char *bitmap_buffer; + } mp_osd_obj_t; - OSD_PB_START =0x10, - OSD_PB_0 =0x11, - OSD_PB_END =0x12, - OSD_PB_1 =0x13 -}; + enum { + OSD_PLAY =0x01, + OSD_PAUSE =0x02, + OSD_STOP =0x03, + OSD_REW =0x04, + OSD_FFW =0x05, + OSD_CLOCK =0x06, + OSD_CONTRAST =0x07, + OSD_SATURATION =0x08, + OSD_VOLUME =0x09, + OSD_BRIGHTNESS =0x0A, + OSD_HUE =0x0B, + OSD_DVDMENU =0x0C, -typedef struct sub_data_s { - char * cp; - int unicode; - int utf8; - int pos; - int bg_color; /* subtitles background color */ - int bg_alpha; -}sub_data_t; -extern sub_data_t sub_data; + OSD_PB_START =0x10, + OSD_PB_0 =0x11, + OSD_PB_END =0x12, + OSD_PB_1 =0x13 + }; -typedef void (* __FASTCALL__ draw_osd_f)(any_t*vo,unsigned idx,int x0,int y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride); -typedef void (* __FASTCALL__ clear_osd_f)(any_t*vo,unsigned idx,int x0,int y0, int w,int h); + typedef struct sub_data_s { + char * cp; + int unicode; + int utf8; + int pos; + int bg_color; /* subtitles background color */ + int bg_alpha; + }sub_data_t; + extern sub_data_t sub_data; -/* for direct calll from XP-thread*/ -extern void __FASTCALL__ vo_draw_spudec(any_t*vo,unsigned idx,int dxs,int dys,draw_osd_f draw_alpha); + class Video_Output; -extern void __FASTCALL__ vo_draw_text(any_t*vo,unsigned idx,int dxs,int dys, draw_osd_f draw_alpha); -extern void __FASTCALL__ vo_remove_text(any_t*vo,unsigned idx,int dxs,int dys,clear_osd_f remove); + typedef void (* __FASTCALL__ draw_osd_f)(const Video_Output* vo,unsigned idx,int x0,int y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride); + typedef void (* __FASTCALL__ clear_osd_f)(const Video_Output* vo,unsigned idx,int x0,int y0, int w,int h); -void vo_init_osd(void); -int __FASTCALL__ vo_update_osd(any_t*vo,int dxs,int dys); -int __FASTCALL__ vo_osd_changed(int new_value); -int __FASTCALL__ get_osd_height(any_t* vo,int c,int h); -void __FASTCALL__ osd_set_nav_box (uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey); + /* for direct calll from XP-thread*/ + extern void __FASTCALL__ vo_draw_spudec(const Video_Output* vo,unsigned idx,int dxs,int dys,draw_osd_f draw_alpha); + extern void __FASTCALL__ vo_draw_text(const Video_Output* vo,unsigned idx,int dxs,int dys, draw_osd_f draw_alpha); + extern void __FASTCALL__ vo_remove_text(const Video_Output* vo,unsigned idx,int dxs,int dys,clear_osd_f remove); + + void vo_init_osd(void); + int __FASTCALL__ vo_update_osd(const Video_Output* vo,int dxs,int dys); + int __FASTCALL__ vo_osd_changed(int new_value); + int __FASTCALL__ get_osd_height(const Video_Output* vo,int c,int h); + void __FASTCALL__ osd_set_nav_box (uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey); +} // namespace #endif Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libvo/video_out.cpp 2012-11-29 09:44:34 UTC (rev 482) @@ -48,6 +48,8 @@ #include "sub.h" #include "vo_msg.h" +namespace mpxp{ + VO_Config::VO_Config() { memset(&subdevice,0,reinterpret_cast<long>(&dbpp) - reinterpret_cast<long>(&subdevice)); movie_aspect=-1.0; @@ -94,16 +96,6 @@ NULL }; -/* fullscreen: - * bit 0 (0x01) means fullscreen (-fs) - * bit 1 (0x02) means mode switching (-vm) - * bit 2 (0x04) enables software scaling (-zoom) - * bit 3 (0x08) enables flipping (-flip) - */ -#define VOFLG_FS 0x00000001UL -#define VOFLG_VM 0x00000002UL -#define VOFLG_ZOOM 0x00000004UL -#define VOFLG_FLIP 0x00000008UL typedef struct dri_priv_s { unsigned flags; int has_dri; @@ -142,9 +134,26 @@ delete vo_iface; } -void vo_print_help(vo_data_t*vo) +Video_Output::Video_Output() { + inited=0; + osd_progbar_type=-1; + osd_progbar_value=100; // 0..256 + + vo_priv_t* priv; + priv=new(zeromem) vo_priv_t; + vo_priv=priv; + rnd_fill(antiviral_hole,reinterpret_cast<long>(&flags)-reinterpret_cast<long>(&antiviral_hole)); +} + +Video_Output::~Video_Output() { + vo_priv_t* priv=static_cast<vo_priv_t*>(vo_priv); + MSG_DBG3("dri_vo_dbg: vo_uninit\n"); + inited--; + delete priv; +} + +void Video_Output::print_help() const { - UNUSED(vo); unsigned i; MSG_INFO("Available video output drivers:\n"); i=0; @@ -155,9 +164,9 @@ MSG_INFO("\n"); } -MPXP_Rc vo_register(vo_data_t*vo,const char *driver_name) +MPXP_Rc Video_Output::_register(const char *driver_name) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; if(!driver_name) priv.video_out=vo_infos[0]; else @@ -171,104 +180,24 @@ return priv.video_out?MPXP_Ok:MPXP_False; } -const vo_info_t* vo_get_info(vo_data_t*vo) +const vo_info_t* Video_Output::get_info() const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); return priv.video_out; } -vo_data_t* __FASTCALL__ vo_preinit_structs( void ) +MPXP_Rc Video_Output::init(const char *subdevice) const { - vo_data_t* vo; - - vo=new(zeromem) vo_data_t; - vo->osd_progbar_type=-1; - vo->osd_progbar_value=100; // 0..256 - - vo_priv_t* priv; - priv=new(zeromem) vo_priv_t; - vo->vo_priv=priv; - rnd_fill(vo->antiviral_hole,offsetof(vo_data_t,flags)-offsetof(vo_data_t,antiviral_hole)); - return vo; -} - -MPXP_Rc __FASTCALL__ vo_init(vo_data_t*vo,const char *subdevice) -{ - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_init(%s)\n",subdevice); priv.frame_counter=0; priv.vo_iface=priv.video_out->query_interface(subdevice); return priv.vo_iface?MPXP_Ok:MPXP_False; } -int __FASTCALL__ vo_describe_fourcc(uint32_t fourcc,vo_format_desc *vd) +void Video_Output::dri_config(uint32_t fourcc) const { - int is_planar; - is_planar=0; - vd->x_mul[0]=vd->x_mul[1]=vd->x_mul[2]=vd->x_mul[3]=1; - vd->x_div[0]=vd->x_div[1]=vd->x_div[2]=vd->x_div[3]=1; - vd->y_mul[0]=vd->y_mul[1]=vd->y_mul[2]=vd->y_mul[3]=1; - vd->y_div[0]=vd->y_div[1]=vd->y_div[2]=vd->y_div[3]=1; - switch(fourcc) - { - case IMGFMT_Y800: - is_planar=1; - case IMGFMT_RGB8: - case IMGFMT_BGR8: - vd->bpp = 8; - break; - case IMGFMT_YVU9: - case IMGFMT_IF09: - vd->bpp = 9; - vd->x_div[1]=vd->x_div[2]=4; - vd->y_div[1]=vd->y_div[2]=4; - is_planar=1; - break; - case IMGFMT_YV12: - case IMGFMT_I420: - case IMGFMT_IYUV: - vd->bpp = 12; - vd->x_div[1]=vd->x_div[2]=2; - vd->y_div[1]=vd->y_div[2]=2; - is_planar=1; - break; - case IMGFMT_YUY2: - case IMGFMT_YVYU: - case IMGFMT_UYVY: - vd->x_mul[0]=2; - vd->bpp = 16; - break; - case IMGFMT_RGB15: - case IMGFMT_BGR15: - vd->bpp = 15; - vd->x_mul[0]=2; - break; - case IMGFMT_RGB16: - case IMGFMT_BGR16: - vd->bpp = 16; - vd->x_mul[0]=2; - break; - case IMGFMT_RGB24: - case IMGFMT_BGR24: - vd->bpp = 24; - vd->x_mul[0]=3; - break; - case IMGFMT_RGB32: - case IMGFMT_BGR32: - vd->bpp = 32; - vd->x_mul[0]=4; - break; - default: - /* unknown fourcc */ - vd->bpp=0; - break; - } - return is_planar; -} - -static void __FASTCALL__ dri_config(vo_data_t*vo,uint32_t fourcc) -{ - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); priv.dri.is_planar = vo_describe_fourcc(fourcc,&priv.vod); priv.dri.bpp=priv.vod.bpp; if(!priv.dri.bpp) priv.dri.has_dri=0; /*unknown fourcc*/ @@ -278,9 +207,9 @@ } } -static void __FASTCALL__ ps_tune(vo_data_t*vo,unsigned width,unsigned height) +void Video_Output::ps_tune(unsigned width,unsigned height) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); int src_is_planar; unsigned src_stride,ps_x,ps_y; vo_format_desc vd; @@ -291,34 +220,29 @@ priv.ps_off[0] = priv.ps_off[1] = priv.ps_off[2] = priv.ps_off[3] = 0; if(!src_is_planar) priv.ps_off[0] = ps_y*src_stride+ps_x*((vd.bpp+7)/8); - else - { + else { priv.ps_off[0] = ps_y*src_stride+ps_x; - if(vd.bpp==12) /*YV12 series*/ - { - priv.ps_off[1] = (ps_y/2)*(src_stride/2)+ps_x/2; - priv.ps_off[2] = (ps_y/2)*(src_stride/2)+ps_x/2; + if(vd.bpp==12) { /*YV12 series*/ + priv.ps_off[1] = (ps_y/2)*(src_stride/2)+ps_x/2; + priv.ps_off[2] = (ps_y/2)*(src_stride/2)+ps_x/2; } - else - if(vd.bpp==9) /*YVU9 series*/ - { - priv.ps_off[1] = (ps_y/4)*(src_stride/4)+ps_x/4; - priv.ps_off[2] = (ps_y/4)*(src_stride/4)+ps_x/4; + else if(vd.bpp==9) { /*YVU9 series*/ + priv.ps_off[1] = (ps_y/4)*(src_stride/4)+ps_x/4; + priv.ps_off[2] = (ps_y/4)*(src_stride/4)+ps_x/4; } } } -static void __FASTCALL__ dri_tune(vo_data_t*vo,unsigned width,unsigned height) +void Video_Output::dri_tune(unsigned width,unsigned height) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); priv.dri.sstride=priv.dri.is_planar?width:width*((priv.dri.bpp+7)/8); priv.dri.off[0] = priv.dri.off[1] = priv.dri.off[2] = priv.dri.off[3] = 0; if(!priv.dri.is_planar) { priv.dri.planes_eq = priv.dri.sstride == priv.dri.cap.strides[0]; priv.dri.off[0] = priv.dri.cap.y*priv.dri.cap.strides[0]+priv.dri.cap.x*((priv.dri.bpp+7)/8); } - else - { + else { unsigned long y_off,u_off,v_off; dri_surface_t surf; surf.idx=0; @@ -327,36 +251,31 @@ u_off = (unsigned long)std::min(surf.planes[1],surf.planes[2]); v_off = (unsigned long)std::max(surf.planes[1],surf.planes[2]); priv.dri.off[0] = priv.dri.cap.y*priv.dri.cap.strides[0]+priv.dri.cap.x; - if(priv.dri.bpp==12) /*YV12 series*/ - { - priv.dri.planes_eq = width == priv.dri.cap.strides[0] && + if(priv.dri.bpp==12) { /*YV12 series*/ + priv.dri.planes_eq = width == priv.dri.cap.strides[0] && width*height == u_off - y_off && width*height*5/4 == v_off - y_off && priv.dri.cap.strides[0]/2 == priv.dri.cap.strides[1] && priv.dri.cap.strides[0]/2 == priv.dri.cap.strides[2]; - priv.dri.off[1] = (priv.dri.cap.y/2)*priv.dri.cap.strides[1]+priv.dri.cap.x/2; - priv.dri.off[2] = (priv.dri.cap.y/2)*priv.dri.cap.strides[2]+priv.dri.cap.x/2; + priv.dri.off[1] = (priv.dri.cap.y/2)*priv.dri.cap.strides[1]+priv.dri.cap.x/2; + priv.dri.off[2] = (priv.dri.cap.y/2)*priv.dri.cap.strides[2]+priv.dri.cap.x/2; } - else - if(priv.dri.bpp==9) /*YVU9 series*/ - { - priv.dri.planes_eq = width == priv.dri.cap.strides[0] && + else if(priv.dri.bpp==9) { /*YVU9 series*/ + priv.dri.planes_eq = width == priv.dri.cap.strides[0] && width*height == u_off - y_off && width*height*17/16 == v_off - y_off && priv.dri.cap.strides[0]/4 == priv.dri.cap.strides[1] && priv.dri.cap.strides[0]/4 == priv.dri.cap.strides[2]; - priv.dri.off[1] = (priv.dri.cap.y/4)*priv.dri.cap.strides[1]+priv.dri.cap.x/4; - priv.dri.off[2] = (priv.dri.cap.y/4)*priv.dri.cap.strides[2]+priv.dri.cap.x/4; - } - else - if(priv.dri.bpp==8) /*Y800 series*/ - priv.dri.planes_eq = width == priv.dri.cap.strides[0]; + priv.dri.off[1] = (priv.dri.cap.y/4)*priv.dri.cap.strides[1]+priv.dri.cap.x/4; + priv.dri.off[2] = (priv.dri.cap.y/4)*priv.dri.cap.strides[2]+priv.dri.cap.x/4; + } else if(priv.dri.bpp==8) /*Y800 series*/ + priv.dri.planes_eq = width == priv.dri.cap.strides[0]; } priv.dri.accel=(priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER))== (DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER); - priv.dri.dr = priv.srcFourcc == priv.dri.cap.fourcc && !(priv.dri.flags & VOFLG_FLIP) && + priv.dri.dr = priv.srcFourcc == priv.dri.cap.fourcc && !(priv.dri.flags & VOFLAG_FLIPPING) && !priv.ps_off[0] && !priv.ps_off[1] && !priv.ps_off[2] && !priv.ps_off[3]; if(priv.dri.dr && priv.dri.cap.w < width) priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER)?1:0; @@ -368,19 +287,19 @@ priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER)?1:0; } -static void __FASTCALL__ dri_reconfig(vo_data_t*vo,int is_resize ) +void Video_Output::dri_reconfig(int is_resize ) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); priv.dri.has_dri = 1; priv.vo_iface->get_surface_caps(&priv.dri.cap); - dri_config(vo,priv.dri.cap.fourcc); + dri_config(priv.dri.cap.fourcc); /* ugly workaround of swapped BGR-fourccs. Should be removed in the future */ if(!priv.dri.has_dri) { priv.dri.has_dri=1; priv.dri.cap.fourcc = bswap_32(priv.dri.cap.fourcc); - dri_config(vo,priv.dri.cap.fourcc); + dri_config(priv.dri.cap.fourcc); } - dri_tune(vo,priv.image_width,priv.image_height); + dri_tune(priv.image_width,priv.image_height); /* TODO: smart analizer of scaling possibilities of vo_driver */ if(is_resize) { xp_core->in_resize=1; @@ -389,21 +308,20 @@ vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,0); } -static int vo_inited=0; -MPXP_Rc __FASTCALL__ vo_config(vo_data_t*vo,uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, uint32_t fullscreen, const char *title, +MPXP_Rc Video_Output::configure(uint32_t width, uint32_t height, uint32_t d_width, + uint32_t d_height, vo_flags_e _fullscreen, const char *title, uint32_t format) { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MPXP_Rc retval; unsigned dest_fourcc,w,d_w,h,d_h; MSG_DBG3("dri_vo_dbg: vo_config\n"); - if(vo_inited) { + if(inited) { MSG_FATAL("!!!priv.video_out internal fatal error: priv.video_out is initialized more than once!!!\n"); return MPXP_False; } - vo_inited++; - vo->flags=fullscreen; + inited++; + flags=_fullscreen; dest_fourcc = format; priv.org_width = width; priv.org_height = height; @@ -416,16 +334,16 @@ priv.dri.d_width = d_w; priv.dri.d_height = d_h; MSG_V("priv.video_out->config(%u,%u,%u,%u,0x%x,'%s',%s)\n" - ,w,h,d_w,d_h,fullscreen,title,vo_format_name(dest_fourcc)); - retval = priv.vo_iface->configure(w,h,d_w,d_h,fullscreen,title,dest_fourcc); + ,w,h,d_w,d_h,_fullscreen,title,vo_format_name(dest_fourcc)); + retval = priv.vo_iface->configure(w,h,d_w,d_h,_fullscreen,title,dest_fourcc); priv.srcFourcc=format; if(retval == MPXP_Ok) { priv.vo_iface->get_surface_caps(&priv.dri.cap); priv.image_format = format; priv.image_width = w; priv.image_height = h; - ps_tune(vo,priv.image_width,priv.org_height); - dri_reconfig(vo,0); + ps_tune(priv.image_width,priv.org_height); + dri_reconfig(0); MSG_V("dri_vo_caps: driver does %s support DRI\n",priv.dri.has_dri?"":"not"); MSG_V("dri_vo_caps: caps=%08X fourcc=%08X(%s) x,y,w,h(%u %u %u %u)\n" "dri_vo_caps: width_height(%u %u) strides(%u %u %u %u) priv.dri.bpp=%u\n" @@ -441,18 +359,18 @@ "dri_vo_src: flags=%08X fourcc=%08X(%s)\n" ,width,height ,d_width,d_height - ,fullscreen + ,_fullscreen ,format ,vo_format_name(format)); - priv.dri.flags = fullscreen; + priv.dri.flags = _fullscreen; } return retval; } /* if vo_driver doesn't support dri then it won't work with this logic */ -uint32_t __FASTCALL__ vo_query_format(vo_data_t*vo,uint32_t* fourcc, unsigned src_w, unsigned src_h) +uint32_t Video_Output::query_format(uint32_t* fourcc, unsigned src_w, unsigned src_h) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); uint32_t dri_forced_fourcc; vo_query_fourcc_t qfourcc; MSG_DBG3("dri_vo_dbg: vo_query_format(%08lX)\n",*fourcc); @@ -466,16 +384,16 @@ return qfourcc.flags; } -MPXP_Rc vo_reset(vo_data_t*vo) +MPXP_Rc Video_Output::reset() const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_reset\n"); return priv.vo_iface->reset(); } -MPXP_Rc vo_screenshot(vo_data_t*vo,unsigned idx ) +MPXP_Rc Video_Output::screenshot(unsigned idx) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); char buf[256]; MSG_DBG3("dri_vo_dbg: vo_screenshot\n"); sprintf(buf,"%llu",priv.frame_counter); @@ -485,68 +403,61 @@ return gr_screenshot(buf,const_cast<const uint8_t**>(surf.planes),priv.dri.cap.strides,priv.dri.cap.fourcc,priv.dri.cap.width,priv.dri.cap.height); } -MPXP_Rc vo_pause(vo_data_t*vo) +MPXP_Rc Video_Output::pause() const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_pause\n"); return priv.vo_iface->pause(); } -MPXP_Rc vo_resume(vo_data_t*vo) +MPXP_Rc Video_Output::resume() const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_resume\n"); return priv.vo_iface->resume(); } -MPXP_Rc __FASTCALL__ vo_get_surface_caps(vo_data_t* vo,dri_surface_cap_t*caps) { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); +MPXP_Rc Video_Output::get_surface_caps(dri_surface_cap_t*caps) const { + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); priv.vo_iface->get_surface_caps(caps); return MPXP_Ok; } -MPXP_Rc __FASTCALL__ vo_get_surface(vo_data_t*vo,mp_image_t* mpi) +MPXP_Rc Video_Output::get_surface(mp_image_t* mpi) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); int width_less_stride; MSG_DBG2("dri_vo_dbg: vo_get_surface type=%X flg=%X\n",mpi->type,mpi->flags); width_less_stride = 0; - if(mpi->flags & MP_IMGFLAG_PLANAR) - { + if(mpi->flags & MP_IMGFLAG_PLANAR) { width_less_stride = mpi->w <= priv.dri.cap.strides[0] && (mpi->w>>mpi->chroma_x_shift) <= priv.dri.cap.strides[1] && (mpi->w>>mpi->chroma_x_shift) <= priv.dri.cap.strides[2]; } else width_less_stride = mpi->w*mpi->bpp <= priv.dri.cap.strides[0]; - if(priv.dri.has_dri) - { + if(priv.dri.has_dri) { /* static is singlebuffered decoding */ - if(mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1) - { + if(mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1) { MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1\n"); return MPXP_False; } /*I+P requires 2+ static buffers for R/W */ - if(mpi->type==MP_IMGTYPE_IP && (priv.dri.num_xp_frames < 2 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) - { + if(mpi->type==MP_IMGTYPE_IP && (priv.dri.num_xp_frames < 2 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) { MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IP && priv.dri.num_xp_frames < 2) || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /*I+P+B requires 3+ static buffers for R/W */ - if(mpi->type==MP_IMGTYPE_IPB && (priv.dri.num_xp_frames != 3 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) - { + if(mpi->type==MP_IMGTYPE_IPB && (priv.dri.num_xp_frames != 3 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) { MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IPB && priv.dri.num_xp_frames != 3) || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /* video surface is bad thing for reading */ - if(((mpi->flags&MP_IMGFLAG_READABLE)||(mpi->type==MP_IMGTYPE_TEMP)) && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED) - { + if(((mpi->flags&MP_IMGFLAG_READABLE)||(mpi->type==MP_IMGTYPE_TEMP)) && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED) { MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->flags&MP_IMGFLAG_READABLE && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /* it seems that surfaces are equal */ - if((((mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && width_less_stride) || priv.dri.planes_eq) && priv.dri.dr) - { + if((((mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && width_less_stride) || priv.dri.planes_eq) && priv.dri.dr) { dri_surface_t surf; surf.idx=mpi->xp_idx; priv.vo_iface->get_surface(&surf); @@ -566,11 +477,11 @@ else return MPXP_False; } -static int __FASTCALL__ adjust_size(const any_t*vo,unsigned cw,unsigned ch,unsigned *nw,unsigned *nh) +int Video_Output::adjust_size(unsigned cw,unsigned ch,unsigned *nw,unsigned *nh) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(((vo_data_t*)vo)->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: adjust_size was called %u %u %u %u\n",cw,ch,*nw,*nh); - if((priv.dri.flags & VOFLG_ZOOM) && (cw != *nw || ch != *nh) && !(priv.dri.flags & VOFLG_FS)) + if((priv.dri.flags & VOFLAG_SWSCALE) && (cw != *nw || ch != *nh) && !(priv.dri.flags & VOFLAG_FULLSCREEN)) { float aspect,newv; aspect = (float)priv.dri.d_width / (float)priv.dri.d_height; @@ -592,16 +503,21 @@ return 0; } -int vo_check_events(vo_data_t*vo) +static int __FASTCALL__ adjust_size(const Video_Output*vo,unsigned cw,unsigned ch,unsigned *nw,unsigned *nh) { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + return vo->adjust_size(cw,ch,nw,nh); +} + +int Video_Output::check_events() const +{ + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); uint32_t retval; int need_repaint; vo_resize_t vrest; MSG_DBG3("dri_vo_dbg: vo_check_events\n"); vrest.event_type = 0; - vrest.vo = vo; - vrest.adjust_size = adjust_size; + vrest.vo = this; + vrest.adjust_size = ::adjust_size; retval = vrest.event_type = priv.vo_iface->check_events(&vrest); /* it's ok since accelerated drivers doesn't touch surfaces but there is only one driver (vo_x11) which changes surfaces @@ -609,38 +525,38 @@ need_repaint=0; if(priv.dri.has_dri && retval == MPXP_True && (vrest.event_type & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) { need_repaint=1; - dri_reconfig(vo,1); + dri_reconfig(1); } return (need_repaint && !priv.dri.accel) || (vrest.event_type&VO_EVENT_FORCE_UPDATE); } -MPXP_Rc vo_fullscreen(vo_data_t*vo) +MPXP_Rc Video_Output::fullscreen() const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MPXP_Rc retval; MSG_DBG3("dri_vo_dbg: vo_fullscreen\n"); retval = priv.vo_iface->toggle_fullscreen(); if(priv.dri.has_dri && retval == MPXP_True) - dri_reconfig(vo,1); - if(retval == MPXP_True) priv.dri.flags ^= VOFLG_FS; + dri_reconfig(1); + if(retval == MPXP_True) priv.dri.flags ^= VOFLAG_FULLSCREEN; return retval; } -unsigned __FASTCALL__ vo_get_num_frames(vo_data_t*vo) { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); +unsigned Video_Output::get_num_frames() const { + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); return priv.dri.num_xp_frames; } -MPXP_Rc __FASTCALL__ vo_draw_slice(vo_data_t*vo,const mp_image_t *mpi) +MPXP_Rc Video_Output::draw_slice(const mp_image_t *mpi) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i,_w[4],_h[4],x,y; MSG_DBG3("dri_vo_dbg: vo_draw_slice xywh=%i %i %i %i\n",mpi->x,mpi->y,mpi->w,mpi->h); if(priv.dri.has_dri) { uint8_t *dst[4]; const uint8_t *ps_src[4]; int dstStride[4]; - int finalize=vo_is_final(vo); + int finalize=is_final(); unsigned idx = mpi->xp_idx; dri_surface_t surf; surf.idx=idx; @@ -669,16 +585,16 @@ return MPXP_False; } -void vo_select_frame(vo_data_t*vo,unsigned play_idx) +void Video_Output::select_frame(unsigned play_idx) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG2("dri_vo_dbg: vo_select_frame(play_idx=%u)\n",play_idx); priv.vo_iface->select_frame(play_idx); } -void vo_flush_page(vo_data_t*vo,unsigned decoder_idx) +void Video_Output::flush_page(unsigned decoder_idx) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_flush_pages [idx=%u]\n",decoder_idx); priv.frame_counter++; if((priv.dri.cap.caps & DRI_CAP_VIDEO_MMAPED)!=DRI_CAP_VIDEO_MMAPED) @@ -686,9 +602,9 @@ } /* DRAW OSD */ -static void __FASTCALL__ clear_rect(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) +void Video_Output::clear_rect(unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; for(i=0;i<h;i++) { @@ -697,9 +613,9 @@ } } -static void __FASTCALL__ clear_rect2(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) +void Video_Output::clear_rect2(unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; unsigned _y1 = priv.dri.cap.y/2; unsigned _y2 = (priv.dri.cap.y+priv.dri.cap.h)/2; @@ -710,9 +626,9 @@ } } -static void __FASTCALL__ clear_rect4(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) +void Video_Output::clear_rect4(unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; unsigned _y1 = priv.dri.cap.y/4; unsigned _y2 = (priv.dri.cap.y+priv.dri.cap.h)/4; @@ -723,9 +639,9 @@ } } -static void __FASTCALL__ clear_rect_rgb(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) +void Video_Output::clear_rect_rgb(unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; for(i=0;i<h;i++) { @@ -734,9 +650,9 @@ } } -static void __FASTCALL__ clear_rect_yuy2(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) +void Video_Output::clear_rect_yuy2(unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; for(i=0;i<h;i++) { @@ -755,14 +671,13 @@ } } -static void __FASTCALL__ dri_remove_osd(any_t*_vo,unsigned idx,int x0,int _y0, int w,int h) +void Video_Output::dri_remove_osd(unsigned idx,int x0,int _y0, int w,int h) const { - vo_data_t* vo=reinterpret_cast<vo_data_t*>(_vo); - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); dri_surface_t surf; surf.idx=idx; priv.vo_iface->get_surface(&surf); - if(x0+w<=priv.dri.cap.width&&_y0+h<=priv.dri.cap.height) + if(unsigned(x0+w)<=priv.dri.cap.width&&unsigned(_y0+h)<=priv.dri.cap.height) switch(priv.dri.cap.fourcc) { case IMGFMT_RGB15: @@ -773,49 +688,49 @@ case IMGFMT_BGR24: case IMGFMT_RGB32: case IMGFMT_BGR32: - clear_rect_rgb(vo,_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0*((priv.dri.bpp+7)/8), + clear_rect_rgb(_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0*((priv.dri.bpp+7)/8), w*(priv.dri.bpp+7)/8,priv.dri.cap.strides[0]); break; case IMGFMT_YVYU: case IMGFMT_YUY2: - clear_rect_yuy2(vo,_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0*2, + clear_rect_yuy2(_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0*2, w*2,priv.dri.cap.strides[0]); break; case IMGFMT_UYVY: - clear_rect_yuy2(vo,_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0*2+1, + clear_rect_yuy2(_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0*2+1, w*2,priv.dri.cap.strides[0]); break; case IMGFMT_Y800: - clear_rect(vo,_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0, + clear_rect(_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0, w,priv.dri.cap.strides[0],0x10); break; case IMGFMT_YV12: case IMGFMT_I420: case IMGFMT_IYUV: - clear_rect(vo,_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0, + clear_rect(_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0, w,priv.dri.cap.strides[0],0x10); - clear_rect2(vo,_y0/2,h/2,surf.planes[1]+_y0/2*priv.dri.cap.strides[1]+x0/2, + clear_rect2(_y0/2,h/2,surf.planes[1]+_y0/2*priv.dri.cap.strides[1]+x0/2, w/2,priv.dri.cap.strides[1],0x80); - clear_rect2(vo,_y0/2,h/2,surf.planes[2]+_y0/2*priv.dri.cap.strides[2]+x0/2, + clear_rect2(_y0/2,h/2,surf.planes[2]+_y0/2*priv.dri.cap.strides[2]+x0/2, w/2,priv.dri.cap.strides[2],0x80); break; case IMGFMT_YVU9: case IMGFMT_IF09: - clear_rect(vo,_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0, + clear_rect(_y0,h,surf.planes[0]+_y0*priv.dri.cap.strides[0]+x0, w,priv.dri.cap.strides[0],0x10); - clear_rect4(vo,_y0/4,h/4,surf.planes[1]+_y0/4*priv.dri.cap.strides[1]+x0/4, + clear_rect4(_y0/4,h/4,surf.planes[1]+_y0/4*priv.dri.cap.strides[1]+x0/4, w/4,priv.dri.cap.strides[1],0x80); - clear_rect4(vo,_y0/4,h/4,surf.planes[2]+_y0/4*priv.dri.cap.strides[2]+x0/4, + clear_rect4(_y0/4,h/4,surf.planes[2]+_y0/4*priv.dri.cap.strides[2]+x0/4, w/4,priv.dri.cap.strides[2],0x80); break; } } -static void __FASTCALL__ dri_draw_osd(any_t*vo,unsigned idx,int x0,int _y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride) +void Video_Output::dri_draw_osd(unsigned idx,int x0,int _y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(reinterpret_cast<vo_data_t*>(vo)->vo_priv); - int finalize=vo_is_final(reinterpret_cast<vo_data_t*>(vo)); - if(x0+w<=priv.dri.cap.width&&_y0+h<=priv.dri.cap.height) + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); + int finalize=is_final(); + if(unsigned(x0+w)<=priv.dri.cap.width&&unsigned(_y0+h)<=priv.dri.cap.height) { if(!priv.draw_alpha) priv.draw_alpha=new(zeromem) OSD_Render(priv.dri.cap.fourcc); if(priv.draw_alpha) { @@ -829,53 +744,119 @@ } } -void vo_draw_osd(vo_data_t*vo,unsigned idx) +static void dri_remove_osd(const Video_Output* vo,unsigned idx,int x0,int _y0, int w,int h) { + return vo->dri_remove_osd(idx,x0,_y0,w,h); +} +static void dri_draw_osd(const Video_Output* vo,unsigned idx,int x0,int _y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride) { + return vo->dri_draw_osd(idx,x0,_y0,w,h,src,srca,stride); +} + +void Video_Output::draw_osd(unsigned idx) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_draw_osd\n"); if(priv.dri.has_dri && !(priv.dri.cap.caps & DRI_CAP_HWOSD)) { if( priv.dri.cap.x || priv.dri.cap.y || priv.dri.cap.w != priv.dri.cap.width || priv.dri.cap.h != priv.dri.cap.height) - vo_remove_text(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_remove_osd); - vo_draw_text(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_draw_osd); + vo_remove_text(this,idx,priv.dri.cap.width,priv.dri.cap.height,::dri_remove_osd); + vo_draw_text(this,idx,priv.dri.cap.width,priv.dri.cap.height,::dri_draw_osd); } } -void vo_draw_spudec_direct(vo_data_t*vo,unsigned idx) +void Video_Output::draw_spudec_direct(unsigned idx) const { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); MSG_DBG3("dri_vo_dbg: vo_draw_osd\n"); if(priv.dri.has_dri && !(priv.dri.cap.caps & DRI_CAP_HWOSD)) { // if( priv.dri.cap.x || priv.dri.cap.y || // priv.dri.cap.w != priv.dri.cap.width || priv.dri.cap.h != priv.dri.cap.height) // vo_remove_text(idx,priv.dri.cap.width,priv.dri.cap.height,dri_remove_osd); - vo_draw_spudec(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_draw_osd); + vo_draw_spudec(this,idx,priv.dri.cap.width,priv.dri.cap.height,::dri_draw_osd); } } -void vo_uninit(vo_data_t*vo) -{ - vo_priv_t* priv=static_cast<vo_priv_t*>(vo->vo_priv); - MSG_DBG3("dri_vo_dbg: vo_uninit\n"); - vo_inited--; - delete priv; -} -MPXP_Rc __FASTCALL__ vo_control(vo_data_t*vo,uint32_t request, any_t*data) +MPXP_Rc Video_Output::ctrl(uint32_t request, any_t*data) const { MPXP_Rc rval; - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); rval=priv.vo_iface->ctrl(request,data); MSG_DBG3("dri_vo_dbg: %u=vo_control( %u, %p )\n",rval,request,data); return rval; } -int __FASTCALL__ vo_is_final(vo_data_t*vo) { - vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); +int Video_Output::is_final() const { + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); int mmaped=priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED; int busmaster=priv.dri.cap.caps&DRI_CAP_BUSMASTERING; return mmaped||busmaster||(priv.dri.num_xp_frames>1); } +int __FASTCALL__ vo_describe_fourcc(uint32_t fourcc,vo_format_desc *vd) +{ + int is_planar; + is_planar=0; + vd->x_mul[0]=vd->x_mul[1]=vd->x_mul[2]=vd->x_mul[3]=1; + vd->x_div[0]=vd->x_div[1]=vd->x_div[2]=vd->x_div[3]=1; + vd->y_mul[0]=vd->y_mul[1]=vd->y_mul[2]=vd->y_mul[3]=1; + vd->y_div[0]=vd->y_div[1]=vd->y_div[2]=vd->y_div[3]=1; + switch(fourcc) + { + case IMGFMT_Y800: + is_planar=1; + case IMGFMT_RGB8: + case IMGFMT_BGR8: + vd->bpp = 8; + break; + case IMGFMT_YVU9: + case IMGFMT_IF09: + vd->bpp = 9; + vd->x_div[1]=vd->x_div[2]=4; + vd->y_div[1]=vd->y_div[2]=4; + is_planar=1; + break; + case IMGFMT_YV12: + case IMGFMT_I420: + case IMGFMT_IYUV: + vd->bpp = 12; + vd->x_div[1]=vd->x_div[2]=2; + vd->y_div[1]=vd->y_div[2]=2; + is_planar=1; + break; + case IMGFMT_YUY2: + case IMGFMT_YVYU: + case IMGFMT_UYVY: + vd->x_mul[0]=2; + vd->bpp = 16; + break; + case IMGFMT_RGB15: + case IMGFMT_BGR15: + vd->bpp = 15; + vd->x_mul[0]=2; + break; + case IMGFMT_RGB16: + case IMGFMT_BGR16: + vd->bpp = 16; + vd->x_mul[0]=2; + break; + case IMGFMT_RGB24: + case IMGFMT_BGR24: + vd->bpp = 24; + vd->x_mul[0]=3; + break; + case IMGFMT_RGB32: + case IMGFMT_BGR32: + vd->bpp = 32; + vd->x_mul[0]=4; + break; + default: + /* unknown fourcc */ + vd->bpp=0; + break; + } + return is_planar; +} + +} // namespace mpxp Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-11-29 07:05:15 UTC (rev 481) +++ mplayerxp/libvo/video_out.h 2012-11-29 09:44:34 UTC (rev 482) @@ -27,55 +27,61 @@ #include "xmpcore/mp_image.h" #include "xmpcore/xmp_enums.h" -enum { - VO_EVENT_EXPOSE =1, - VO_EVENT_RESIZE =2, - VO_EVENT_KEYPRESS =4, - VO_EVENT_FORCE_UPDATE=0x80000000 -}; +namespace mpxp { + enum { + VO_EVENT_EXPOSE =1, + VO_EVENT_RESIZE =2, + VO_EVENT_KEYPRESS =4, + VO_EVENT_FORCE_UPDATE =0x80000000 + }; -enum { - VOCTRL_SET_EQUALIZER=1, /**< Set video equalizer */ - VOCTRL_GET_EQUALIZER /**< Get video equalizer */ -}; + enum { + VOCTRL_SET_EQUALIZER=1, /**< Set video equalizer */ + VOCTRL_GET_EQUALIZER /**< Get video equalizer */ + }; -enum { - VOFLAG_FULLSCREEN =0x01, /**< User wants to have fullscreen playback */ - VOFLAG_MODESWITCHING=0x02, /**< User enables to find the best video mode */ - VOFLAG_SWSCALE =0x04, /**< Obsolete. User enables slow Software scaler */ - VOFLAG_FLIPPING =0x08 /**< User enables page flipping (doublebuffering / XP mode) */ -}; + enum vo_flags_e { + VOFLAG_NONE =0x00, /**< User wants to have fullscreen playback */ + VOFLAG_FULLSCREEN =0x01, /**< User wants to have fullscreen playback */ + VOFLAG_MODESWITCHING =0x02, /**< User enables to find the best video mode */ + VOFLAG_SWSCALE =0x04, /**< Obsolete. User enables slow Software scaler */ + VOFLAG_FLIPPING =0x08 /**< User enables page flipping (doublebuffering / XP mode) */ + }; -/** Text description of VO-driver */ -class VO_Interface; -typedef VO_Interface* (*query_interface_t)(const char* args); -struct vo_info_t -{ - const char* name; /**< driver name ("Matrox Millennium G200/G400") */ - const char* short_name; /**< short name (for config strings) ("mga") */ - const char* author; /**< author ("Aaron Holtzman <aho...@es...>") */ - const char* comment;/**< any additional comments */ - query_interface_t query_interface; -}; + /** Text description of VO-driver */ + class VO_Interface; + typedef VO_Interface* (*query_interface_t)(const char* args); + struct vo_info_t { + const char* name; /**< driver name ("Matrox Millennium G200/G400") */ + const char* short_name; /**< short name (for config strings) ("mga") */ + const char* author; /**< author ("Aaron Holtzman <aho...@es...>") */ + const char* comment;/**< any additional comments */ + query_interface_t query_interface; + }; -enum { - VOCAP_NA=0x00, - VOCAP_SUPPORTED=0x01, - VOCAP_HWSCALER=0x02, - VOCAP_FLIP=0x04 -}; -/** Request for supported FOURCC by VO-driver */ -typedef struct vo_query_fourcc_s -{ - uint32_t fourcc; /**< Fourcc of decoded image */ - unsigned w,h; /**< Width and height of decoded image */ - unsigned flags; /**< Flags for this fourcc VOCAP_* */ -}vo_query_fourcc_t; + enum { + VOCAP_NA=0x00, + VOCAP_SUPPORTED=0x01, + VOCAP_HWSCALER=0x02, + VOCAP_FLIP=0x04 + }; + inline vo_flags_e operator~(vo_flags_e a) { return static_cast<vo_flags_e>(~static_cast<unsigned>(a)); } + inline vo_flags_e operator|(vo_flags_e a, vo_flags_e b) { return static_cast<vo_flags_e>(static_cast<unsigned>(a)|static_cast<unsigned>(b)); } + inline vo_flags_e operator&(vo_flags_e a, vo_flags_e b) { return static_cast<vo_flags_e>(static_cast<unsigned>(a)&static_cast<unsigned>(b)); } + inline vo_flags_e operator^(vo_flags_e a, vo_flags_e b) { return static_cast<vo_flags_e>(static_cast<unsigned>(a)^static_cast<unsigned>(b)); } + inline vo_flags_e operator|=(vo_flags_e a, vo_flags_e b) { return (a=static_cast<vo_flags_e>(static_cast<unsigned>(a)|static_cast<unsigned>(b))); } + inline vo_flags_e operator&=(vo_flags_e a, vo_flags_e b) { return (a=static_cast<vo_flags_e>(static_cast<unsigned>(a)&static_cast<unsigned>(b))); } + inline vo_flags_e operator^=(vo_flags_e a, vo_flags_e b) { return (a=static_cast<vo_flags_e>(static_cast<unsigned>(a)^static_cast<unsigned>(b))); } + /** Request for supported FOURCC by VO-driver */ + typedef struct vo_query_fourcc_s { + uint32_t fourcc; /**< Fourcc of decoded image */ + unsigned w,h; /**< Width and height of decoded image */ + unsigned flags; /**< Flags for this fourcc VOCAP_* */ + }vo_query_fourcc_t; -/** Named video equalizer */ -typedef struct vo_videq_s -{ + /** Named video equalizer */ + typedef struct vo_videq_s { #define VO_EC_BRIGHTNESS "Brightness" #define VO_EC_CONTRAST "Contrast" #define VO_EC_GAMMA "Gamma" @@ -84,152 +90,162 @@ #define VO_EC_RED_INTENSITY "RedIntensity" #define VO_EC_GREEN_INTENSITY "GreenIntensity" #define VO_EC_BLUE_INTENSITY "BlueIntensity" - const char *name; /**< name of equalizer control */ - int value; /**< value of equalizer control in range -1000 +1000 */ -}vo_videq_t; + const char *name; /**< name of equalizer control */ + int value; /**< value of equalizer control in range -1000 +1000 */ + }vo_videq_t; -typedef struct vo_gamma_s{ - int brightness; - int saturation; - int contrast; - int hue; - int red_intensity; - int green_intensity; - int blue_intensity; -}vo_gamma_t; + typedef struct vo_gamma_s{ + int brightness; + int saturation; + int contrast; + int hue; + int red_intensity; + int green_intensity; + int blue_intensity; + }vo_gamma_t; -typedef struct vo_rect_s { - unsigned x,y,w,h; -}vo_rect_t; + typedef struct vo_rect_s { + unsigned x,y,w,h; + }vo_rect_t; -struct vo_rect2 { - int left, right, top, bottom, width, height; -}; + struct vo_rect2 { + int left, right, top, bottom, width, height; + }; -struct VO_Config { - VO_Config(); - ~VO_Config() {} + struct VO_Config { + VO_Config(); + ~VO_Config() {} - char * subdevice; // currently unused - char* mDisplayName; - int xinerama_screen; + char * subdevice; // currently unused + char* mDisplayName; + int xinerama_screen; - int vsync; + int vsync; - unsigned xp_buffs; /**< contains number of buffers for decoding ahead */ - unsigned use_bm; /**< indicates user's agreement for using busmastering */ + unsigned xp_buffs; /**< contains number of buffers for decoding ahead */ + unsigned use_bm; /**< indicates user's agreement for using busmastering */ - vo_gamma_t gamma; + vo_gamma_t gamma; - int image_width; //opt_screen_size_x - int image_height; //opt_screen_size_y - float image_zoom; //screen_size_xy + int image_width; //opt_screen_size_x + int image_height; //opt_screen_size_y + float image_zoom; //screen_size_xy - float movie_aspect; - int fsmode; - int vidmode; - int fullscreen; - int softzoom; - int flip; - unsigned dbpp; -}; -extern VO_Config vo_conf; + float movie_aspect; + int fsmode; + int vidmode; + int fullscreen; + int sof... [truncated message content] |
From: <nic...@us...> - 2012-11-29 11:31:56
|
Revision: 484 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=484&view=rev Author: nickols_k Date: 2012-11-29 11:31:45 +0000 (Thu, 29 Nov 2012) Log Message: ----------- cleanups + segfault-- Modified Paths: -------------- mplayerxp/libvo/video_out.cpp mplayerxp/libvo/x11_system.h mplayerxp/postproc/af.h mplayerxp/postproc/af_crystality.cpp mplayerxp/postproc/af_delay.cpp mplayerxp/postproc/af_echo3d.cpp mplayerxp/postproc/af_equalizer.cpp mplayerxp/postproc/af_pan.cpp mplayerxp/postproc/af_volnorm.cpp mplayerxp/postproc/af_volume.cpp Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/libvo/video_out.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -194,7 +194,6 @@ priv.vo_iface=priv.video_out->query_interface(subdev); } if(drv_name) delete drv_name; - if(subdev) delete subdev; return priv.vo_iface?MPXP_Ok:MPXP_False; } Modified: mplayerxp/libvo/x11_system.h =================================================================== --- mplayerxp/libvo/x11_system.h 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/libvo/x11_system.h 2012-11-29 11:31:45 UTC (rev 484) @@ -1,8 +1,6 @@ #ifndef X11_COMMON_H #define X11_COMMON_H -#ifdef HAVE_X11 - #include <X11/Xlib.h> #include <X11/Xutil.h> #ifdef HAVE_SHM @@ -163,7 +161,7 @@ GLXContext ctx; XVisualInfo* vis; }; -#endif +#endif // HAVE_OPENGL + } //namespace mpxp -#endif #endif \ No newline at end of file Modified: mplayerxp/postproc/af.h =================================================================== --- mplayerxp/postproc/af.h 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af.h 2012-11-29 11:31:45 UTC (rev 484) @@ -185,30 +185,18 @@ /* print out configuration of filter's chain */ extern void af_showconf(af_instance_t *first); -#ifndef __cplusplus -/* Some other useful macro definitions*/ -#ifndef min -#define min(a,b)(((a)>(b))?(b):(a)) -#endif +template <class T> const T& clamp ( const T& a, const T& min, const T& max ) { + return (a>max)?max:((a<min)?min:a); +} -#ifndef max -#define max(a,b)(((a)>(b))?(a):(b)) -#endif +template <class T> int sign ( const T& a ) { + return (a>0)?1:-1; +} -#endif +template <class T> const T& lrnd ( const T& a, const T& b ) { + return a>=0.0?a+0.5:a-0.5; +} -#ifndef clamp -#define clamp(a,min,max) (((a)>(max))?(max):(((a)<(min))?(min):(a))) -#endif +#endif /* __AF_H__ */ -#ifndef sign -#define sign(a) (((a)>0)?(1):(-1)) -#endif -#ifndef lrnd -#define lrnd(a,b) ((b)((a)>=0.0?(a)+0.5:(a)-0.5)) -#endif - -#endif /* __aop_h__ */ - - Modified: mplayerxp/postproc/af_crystality.cpp =================================================================== --- mplayerxp/postproc/af_crystality.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_crystality.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -71,7 +71,7 @@ #include "libmpdemux/demuxer.h" #include "libmpdemux/stheader.h" -#define SAMPLE_MAX 1. +#define SAMPLE_MAX 1.0f //#define SAMPLE_MAX 1.0 /* for float32 */ @@ -388,11 +388,11 @@ inline float __FASTCALL__ calc_scalefactor(float a, float e){ float x; - a=clamp(a,0,SAMPLE_MAX/4); - e=clamp(e,0,SAMPLE_MAX/4); + a=clamp(a,0.f,SAMPLE_MAX/4); + e=clamp(e,0.f,SAMPLE_MAX/4); // return (e + a) /2; x = ((e+500/SAMPLE_MAX) * 4096 )/ (a + 300/SAMPLE_MAX) + e; - return clamp(x,0,SAMPLE_MAX/2); + return clamp(x,0.f,SAMPLE_MAX/2); } static struct Interpolation bandext_energy; Modified: mplayerxp/postproc/af_delay.cpp =================================================================== --- mplayerxp/postproc/af_delay.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_delay.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -53,7 +53,7 @@ s->ri = 0; for(i=0;i<AF_NCH;i++){ MSG_DBG2("[delay] Channel %i delayed by %0.3fms\n", - i,clamp(s->d[i],0.0,1000.0)); + i,clamp(s->d[i],0.0f,1000.0f)); MSG_DBG2("[delay] Channel %i delayed by %i samples\n", i,s->wi[i]); } Modified: mplayerxp/postproc/af_echo3d.cpp =================================================================== --- mplayerxp/postproc/af_echo3d.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_echo3d.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -142,8 +142,8 @@ s->left0p = left[0]; s->right0p = right[0]; // ************ store sample ********** - outptr[0] = clamp(_left,INT_MIN,INT_MAX); - outptr[1] = clamp(_right,INT_MIN,INT_MAX); + outptr[0] = clamp(_left,float(INT_MIN),float(INT_MAX)); + outptr[1] = clamp(_right,float(INT_MIN),float(INT_MAX)); inptr += 2; outptr += 2; } Modified: mplayerxp/postproc/af_equalizer.cpp =================================================================== --- mplayerxp/postproc/af_equalizer.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_equalizer.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -50,8 +50,8 @@ #define CF {31.25,62.5,125,250,500,1000,2000,4000,8000,16000} // Maximum and minimum gain for the bands -#define G_MAX +12.0 -#define G_MIN -12.0 +#define G_MAX +12.0f +#define G_MIN -12.0f // Data for specific instances of this filter typedef struct af_equalizer_s Modified: mplayerxp/postproc/af_pan.cpp =================================================================== --- mplayerxp/postproc/af_pan.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_pan.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -51,7 +51,7 @@ j = 0; k = 0; while((*cp == ':') && (k < AF_NCH)){ sscanf(cp, ":%f%n" , &s->level[k][j], &n); - s->level[k][j] = clamp(s->level[k][j],0.0,1.0); + s->level[k][j] = clamp(s->level[k][j],0.0f,1.0f); MSG_V("[pan] Pan level from channel %i to" " channel %i = %f\n",j,k,s->level[k][j]); cp =&cp[n]; @@ -69,7 +69,7 @@ int ch = ce->ch; float* level = reinterpret_cast<float*>(ce->arg); for(i=0;i<AF_NCH;i++) - s->level[ch][i] = clamp(level[i],0.0,1.0); + s->level[ch][i] = clamp(level[i],0.0f,1.0f); return MPXP_Ok; } case AF_CONTROL_PAN_LEVEL | AF_CONTROL_GET:{ Modified: mplayerxp/postproc/af_volnorm.cpp =================================================================== --- mplayerxp/postproc/af_volnorm.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_volnorm.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -40,8 +40,8 @@ // mul is the value by which the samples are scaled // and has to be in [MUL_MIN, MUL_MAX] #define MUL_INIT 1.0 -#define MUL_MIN 0.1 -#define MUL_MAX 5.0 +#define MUL_MIN 0.1f +#define MUL_MAX 5.0f // "Ideal" level #define MID_S16 (SHRT_MAX * 0.25) #define MID_FLOAT (INT_MAX * 0.25) Modified: mplayerxp/postproc/af_volume.cpp =================================================================== --- mplayerxp/postproc/af_volume.cpp 2012-11-29 10:25:47 UTC (rev 483) +++ mplayerxp/postproc/af_volume.cpp 2012-11-29 11:31:45 UTC (rev 484) @@ -186,7 +186,7 @@ else if(x <= -M_PI/2) x = -1.0; else x = sin(x); } else {// Hard clipping - x=clamp(x,-1.0,1.0); + x=clamp(x,-1.0f,1.0f); } _out[i] = x; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-30 11:24:53
|
Revision: 491 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=491&view=rev Author: nickols_k Date: 2012-11-30 11:24:40 +0000 (Fri, 30 Nov 2012) Log Message: ----------- next stage of full redesign of project: move audio->decoder_t from sh_video Modified Paths: -------------- mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpcodecs/vd.h mplayerxp/libmpcodecs/vd_divx4.cpp mplayerxp/libmpcodecs/vd_dmo.cpp mplayerxp/libmpcodecs/vd_dshow.cpp mplayerxp/libmpcodecs/vd_huffyuv.cpp mplayerxp/libmpcodecs/vd_internal.h mplayerxp/libmpcodecs/vd_lavc.cpp mplayerxp/libmpcodecs/vd_libdv.cpp mplayerxp/libmpcodecs/vd_libmpeg2.cpp mplayerxp/libmpcodecs/vd_mpegpes.cpp mplayerxp/libmpcodecs/vd_null.cpp mplayerxp/libmpcodecs/vd_nuv.cpp mplayerxp/libmpcodecs/vd_qtvideo.cpp mplayerxp/libmpcodecs/vd_raw.cpp mplayerxp/libmpcodecs/vd_real.cpp mplayerxp/libmpcodecs/vd_theora.cpp mplayerxp/libmpcodecs/vd_vfw.cpp mplayerxp/libmpcodecs/vd_xanim.cpp mplayerxp/libmpcodecs/vd_xvid.cpp mplayerxp/libmpdemux/stheader.h mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/xmpcore/xmp_vdecoder.cpp Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -48,6 +48,7 @@ typedef struct priv_s { sh_video_t* parent; const vd_functions_t* mpvdec; + any_t* libinput; }priv_t; MPXP_Rc mpcv_get_quality_max(any_t *opaque,unsigned *quality){ @@ -128,11 +129,11 @@ any_t * mpcv_lavc_init(sh_video_t* sh_video,any_t* libinput) { priv_t* priv = new(zeromem) priv_t; priv->parent=sh_video; - sh_video->decoder=priv; + priv->libinput=libinput; /* Use lavc's drivers as last hope */ priv->mpvdec=vfm_find_driver("lavc"); if(priv->mpvdec) { - if(priv->mpvdec->init(sh_video,libinput)!=MPXP_Ok){ + if(priv->mpvdec->init(sh_video,priv)!=MPXP_Ok){ MSG_ERR(MSGTR_CODEC_CANT_INITV); return NULL; } @@ -150,7 +151,7 @@ sh_video->codec=NULL; priv_t* priv = new(zeromem) priv_t; priv->parent=sh_video; - sh_video->decoder=priv; + priv->libinput=libinput; if(vfm) { priv->mpvdec=vfm_find_driver(vfm); if(priv->mpvdec) vprobe=priv->mpvdec->probe(sh_video,sh_video->fourcc); @@ -167,7 +168,7 @@ priv->mpvdec=vfm_find_driver(vfm); } if(priv->mpvdec) { - if(priv->mpvdec->init(sh_video,libinput)!=MPXP_Ok){ + if(priv->mpvdec->init(sh_video,priv)!=MPXP_Ok){ MSG_ERR(MSGTR_CODEC_CANT_INITV); delete sh_video->codec; sh_video->codec=NULL; @@ -202,7 +203,7 @@ if(!(priv->mpvdec=vfm_find_driver(sh_video->codec->driver_name))) continue; else MSG_DBG3("mpcv_init: mpcodecs_vd_drivers[%s]->mpvdec==0\n",priv->mpvdec->info->driver_name); // it's available, let's try to init! - if(priv->mpvdec->init(sh_video,libinput)!=MPXP_Ok){ + if(priv->mpvdec->init(sh_video,priv)!=MPXP_Ok){ MSG_ERR(MSGTR_CODEC_CANT_INITV); continue; // try next... } @@ -401,12 +402,13 @@ #include "libvo/video_out.h" -MPXP_Rc mpcodecs_config_vf(sh_video_t *sh, int w, int h, any_t* libinput){ - priv_t* priv=(priv_t*)sh->decoder; +MPXP_Rc mpcodecs_config_vf(any_t *opaque, int w, int h){ + priv_t* priv=reinterpret_cast<priv_t*>(opaque); int i,j; unsigned int out_fmt=0; int screen_size_x=0;//SCREEN_SIZE_X; int screen_size_y=0;//SCREEN_SIZE_Y; + sh_video_t* sh = priv->parent; vf_instance_t* vf=sh->vfilter,*sc=NULL; int palette=0; @@ -461,13 +463,13 @@ MSG_WARN("'%s' ",vo_format_name(sh->codec->outfmt[ind])); } MSG_WARN("Trying -vf fmtcvt\n"); - sc=vf=vf_open_filter(vf,sh,"fmtcvt",NULL,libinput); + sc=vf=vf_open_filter(vf,sh,"fmtcvt",NULL,priv->libinput); goto csp_again; } else if(palette==1){ MSG_V("vd: Trying -vf palette...\n"); palette=-1; - vf=vf_open_filter(vf,sh,"palette",NULL,libinput); + vf=vf_open_filter(vf,sh,"palette",NULL,priv->libinput); goto csp_again; } else { // sws failed, if the last filter (vf_vo) support MPEGPES try to append vf_lavc @@ -501,7 +503,7 @@ if(vo_data->flags&VFCAP_FLIPPED) vo_data->FLIP_REVERT(); if(vo_data->FLIP() && !(vo_data->flags&VFCAP_FLIP)){ // we need to flip, but no flipping filter avail. - sh->vfilter=vf=vf_open_filter(vf,sh,"flip",NULL,libinput); + sh->vfilter=vf=vf_open_filter(vf,sh,"flip",NULL,priv->libinput); } // time to do aspect ratio corrections... Modified: mplayerxp/libmpcodecs/vd.h =================================================================== --- mplayerxp/libmpcodecs/vd.h 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd.h 2012-11-30 11:24:40 UTC (rev 491) @@ -53,7 +53,7 @@ const vd_info_t* info; const config_t* options;/**< Optional: MPlayerXP's option related */ const video_probe_t*(*__FASTCALL__ probe)(sh_video_t *sh,uint32_t fourcc); - MPXP_Rc (*__FASTCALL__ init)(sh_video_t *sh,any_t* libinput); + MPXP_Rc (*__FASTCALL__ init)(sh_video_t *sh,any_t*opaque); void (*__FASTCALL__ uninit)(sh_video_t *sh); MPXP_Rc (*control_vd)(sh_video_t *sh,int cmd,any_t* arg, ...); mp_image_t* (*__FASTCALL__ decode)(sh_video_t *sh,const enc_frame_t* frame); @@ -70,7 +70,7 @@ VDCTRL_RESYNC_STREAM =7 /* resync video stream if needed */ }; // callbacks: -MPXP_Rc __FASTCALL__ mpcodecs_config_vf(sh_video_t *sh, int w, int h, any_t* libinput); +MPXP_Rc __FASTCALL__ mpcodecs_config_vf(any_t *opaque, int w, int h); mp_image_t* __FASTCALL__ mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag,int w, int h); void __FASTCALL__ mpcodecs_draw_slice(sh_video_t* sh, mp_image_t*); void __FASTCALL__ mpcodecs_draw_image(sh_video_t* sh, mp_image_t *mpi); Modified: mplayerxp/libmpcodecs/vd_divx4.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_divx4.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_divx4.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -209,12 +209,12 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ DecInit dinit; priv_t*p; int bits=12; if(!load_lib("libdivx"SLIBSUFFIX)) return MPXP_False; - if(!(mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput))) return MPXP_False; + if(!(mpcodecs_config_vf(opaque,sh->src_w,sh->src_h))) return MPXP_False; switch(sh->codec->outfmt[sh->outfmtidx]){ case IMGFMT_YV12: case IMGFMT_I420: Modified: mplayerxp/libmpcodecs/vd_dmo.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dmo.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_dmo.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -47,7 +47,7 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ unsigned int out_fmt; if(!(sh->context=DMO_VideoDecoder_Open(sh->codec->dll_name,&sh->codec->guid, sh->bih, 0, 0))){ MSG_ERR(MSGTR_MissingDLLcodec,sh->codec->dll_name); @@ -55,7 +55,7 @@ "package from: ftp://mplayerhq.hu/MPlayer/releases/w32codec.tar.bz2!\n"); return MPXP_False; } - if(!mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput)) return MPXP_False; + if(!mpcodecs_config_vf(opaque,sh->src_w,sh->src_h)) return MPXP_False; out_fmt=sh->codec->outfmt[sh->outfmtidx]; switch(out_fmt){ case IMGFMT_YUY2: Modified: mplayerxp/libmpcodecs/vd_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dshow.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_dshow.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -66,7 +66,7 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ unsigned int out_fmt; if(!(sh->context=DS_VideoDecoder_Open(sh->codec->dll_name,&sh->codec->guid, sh->bih, 0, 0))){ MSG_ERR(MSGTR_MissingDLLcodec,sh->codec->dll_name); @@ -74,7 +74,7 @@ MSG_HINT("package from: ftp://mplayerhq.hu/MPlayer/releases/w32codec.zip !\n"); return MPXP_False; } - if(!mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput)) return MPXP_False; + if(!mpcodecs_config_vf(opaque,sh->src_w,sh->src_h)) return MPXP_False; out_fmt=sh->codec->outfmt[sh->outfmtidx]; switch(out_fmt){ case IMGFMT_YUY2: Modified: mplayerxp/libmpcodecs/vd_huffyuv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -198,7 +198,7 @@ * Init HuffYUV decoder * */ -static MPXP_Rc init(sh_video_t *sh,any_t* libinput) +static MPXP_Rc init(sh_video_t *sh,any_t* opaque) { MPXP_Rc vo_ret; // Video output init ret value priv_t *priv; // Decoder context @@ -328,7 +328,7 @@ switch (priv->bitmaptype) { case BMPTYPE_RGB: case BMPTYPE_YUV: - vo_ret = mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + vo_ret = mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); break; case BMPTYPE_RGBA: MSG_ERR( "[HuffYUV] RGBA not supported yet.\n"); Modified: mplayerxp/libmpcodecs/vd_internal.h =================================================================== --- mplayerxp/libmpcodecs/vd_internal.h 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_internal.h 2012-11-30 11:24:40 UTC (rev 491) @@ -14,7 +14,7 @@ static const video_probe_t* __FASTCALL__ probe(sh_video_t *sh,uint32_t fourcc); static MPXP_Rc control_vd(sh_video_t *sh,int cmd,any_t* arg,...); -static MPXP_Rc __FASTCALL__ init(sh_video_t *sh,any_t* libinput); +static MPXP_Rc __FASTCALL__ init(sh_video_t *sh,any_t*opaque); static void __FASTCALL__ uninit(sh_video_t *sh); static mp_image_t* __FASTCALL__ decode(sh_video_t *sh,const enc_frame_t* frame); Modified: mplayerxp/libmpcodecs/vd_lavc.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_lavc.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_lavc.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -243,7 +243,7 @@ return MPXP_False; } -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ unsigned avc_version=0; priv_t *priv = reinterpret_cast<priv_t*>(sh->context); int pp_flags; @@ -425,7 +425,7 @@ } if(pp_flags) ppContext=pp2_get_context(sh->src_w,sh->src_h,pp_flags); } - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_libdv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libdv.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_libdv.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -78,10 +78,10 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput) +static MPXP_Rc init(sh_video_t *sh,any_t* opaque) { sh->context = (any_t*)init_global_rawdv_decoder(); - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_libmpeg2.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -257,12 +257,12 @@ return MPXP_Unknown; } -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ priv_t *priv; if(!load_lib("libmpeg2"SLIBSUFFIX)) return MPXP_False; sh->context=priv=new(zeromem) priv_t; if(!(priv->mpeg2dec=mpeg2_init(MPXPCtx->mplayer_accel))) return MPXP_False; - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_mpegpes.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_mpegpes.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_mpegpes.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -101,8 +101,8 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_null.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_null.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_null.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -27,9 +27,9 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ UNUSED(sh); - UNUSED(libinput); + UNUSED(opaque); return MPXP_Ok; } Modified: mplayerxp/libmpcodecs/vd_nuv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_nuv.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_nuv.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -49,8 +49,8 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_qtvideo.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_qtvideo.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_qtvideo.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -121,7 +121,7 @@ static int codec_inited=0; // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ long result = 1; ComponentResult cres; ComponentDescription desc; @@ -293,9 +293,9 @@ } MSG_V("imgfmt: %s qt_imgfmt: %.4s\n", vo_format_name(imgfmt), &qt_imgfmt); sh->context = (any_t*)qt_imgfmt; - if(!mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput)) return MPXP_False; + if(!mpcodecs_config_vf(opaque,sh->src_w,sh->src_h)) return MPXP_False; #else - if(!mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput)) return MPXP_False; + if(!mpcodecs_config_vf(opaque,sh->src_w,sh->src_h)) return MPXP_False; #endif return MPXP_Ok; } Modified: mplayerxp/libmpcodecs/vd_raw.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_raw.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_raw.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -88,7 +88,7 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ // set format fourcc for raw RGB: if(sh->fourcc==0){ switch(sh->bih->biBitCount){ @@ -101,7 +101,7 @@ MSG_WARN("RAW: depth %d not supported\n",sh->bih->biBitCount); } } - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_real.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_real.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_real.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -165,7 +165,7 @@ } rv_init_t; // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ //unsigned int out_fmt; int result; // we export codec id and sub-id from demuxer in bitmapinfohdr: @@ -180,7 +180,7 @@ if(!load_syms(sh->codec->dll_name)) return MPXP_False; // only I420 supported - if(!mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput)) return MPXP_False; + if(!mpcodecs_config_vf(opaque,sh->src_w,sh->src_h)) return MPXP_False; // init codec: sh->context=NULL; result=(*rvyuv_init)(&init_data, &sh->context); Modified: mplayerxp/libmpcodecs/vd_theora.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_theora.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_theora.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -67,7 +67,7 @@ /* * init driver */ -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ priv_t *priv = NULL; int failed = 1; int errorCode = 0; @@ -127,7 +127,7 @@ MSG_V("INFO: Theora video init ok!\n"); - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } /* Modified: mplayerxp/libmpcodecs/vd_vfw.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -246,7 +246,7 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ priv_t *priv; int vfw_ex; if(strcmp(sh->codec->driver_name,"vfwex") == 0) vfw_ex=1; @@ -259,7 +259,7 @@ priv->ex = vfw_ex; if(init_vfw_video_codec(sh)!=MPXP_Ok) return MPXP_False; MSG_V("INFO: Win32/VFW init OK!\n"); - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } // uninit driver Modified: mplayerxp/libmpcodecs/vd_xanim.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_xanim.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_xanim.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -895,9 +895,9 @@ } // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ if(xacodec_init_video(sh,sh->codec->outfmt[sh->outfmtidx])) - return mpcodecs_config_vf(sh,sh->src_w,sh->src_h,libinput); + return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); return MPXP_False; } Modified: mplayerxp/libmpcodecs/vd_xvid.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_xvid.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpcodecs/vd_xvid.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -315,7 +315,7 @@ } #endif // init driver -static MPXP_Rc init(sh_video_t *sh,any_t* libinput){ +static MPXP_Rc init(sh_video_t *sh,any_t* opaque){ xvid_gbl_info_t xvid_gbl_info; xvid_gbl_init_t xvid_ini; xvid_dec_create_t dec_p; @@ -434,7 +434,7 @@ priv->img_type = MP_IMGTYPE_TEMP; break; } - return mpcodecs_config_vf(sh, sh->src_w, sh->src_h,libinput); + return mpcodecs_config_vf(opaque, sh->src_w, sh->src_h); } // uninit driver Modified: mplayerxp/libmpdemux/stheader.h =================================================================== --- mplayerxp/libmpdemux/stheader.h 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/libmpdemux/stheader.h 2012-11-30 11:24:40 UTC (rev 491) @@ -83,8 +83,6 @@ uint32_t fourcc; int is_static; /* default: 0 - means movie; 1 - means picture (.jpg ...)*/ - any_t* decoder; - // output format: float fps; int chapter_change; Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/mplayerxp.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -199,7 +199,8 @@ MP_Config mp_conf; MPXPContext::MPXPContext() - :audio(*new(zeromem) audio_processing_t) + :audio(*new(zeromem) audio_processing_t), + video(*new(zeromem) video_processing_t) { seek_time=-1; bench=new(zeromem) time_usage_t; @@ -333,7 +334,7 @@ if(mask&INITED_VCODEC){ inited_flags&=~INITED_VCODEC; MP_UNIT("uninit_vcodec"); - mpcv_uninit(sh_video->decoder); + mpcv_uninit(MPXPCtx->video.decoder); sh_video=NULL; } @@ -701,7 +702,7 @@ if(sh_video){ MP_UNIT("seek_video_reset"); - mpcv_resync_stream(sh_video->decoder); + mpcv_resync_stream(MPXPCtx->video.decoder); vo_data->reset(); sh_video->chapter_change=-1; } @@ -1176,7 +1177,7 @@ if(vo_conf.softzoom) vo_data->ZOOM_SET(); if(vo_conf.flip>0) vo_data->FLIP_SET(); if(vo_conf.vidmode) vo_data->VM_SET(); - if((sh_video->decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,MPXPSys->libinput()))) sh_video->inited=1; + if((MPXPCtx->video.decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,MPXPSys->libinput()))) sh_video->inited=1; #ifdef ENABLE_WIN32LOADER if(!sh_video->inited) { /* Go through the codec.conf and find the best codec...*/ @@ -1197,7 +1198,7 @@ } } /* Use lavc decoders as last hope */ - if(!sh_video->inited) sh_video->decoder=mpcv_lavc_init(sh_video,MPXPSys->libinput()); + if(!sh_video->inited) MPXPCtx->video.decoder=mpcv_lavc_init(sh_video,MPXPSys->libinput()); #endif if(!sh_video->inited) { @@ -1521,7 +1522,7 @@ else v_cont+=v; if(v_cont > 100) v_cont=100; if(v_cont < -100) v_cont = -100; - if(mpcv_set_colors(sh_video->decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok){ + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok){ #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1539,7 +1540,7 @@ else v_bright+=v; if(v_bright > 100) v_bright = 100; if(v_bright < -100) v_bright = -100; - if(mpcv_set_colors(sh_video->decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok){ + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok){ #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1557,7 +1558,7 @@ else v_hue+=v; if(v_hue > 100) v_hue = 100; if(v_hue < -100) v_hue = -100; - if(mpcv_set_colors(sh_video->decoder,VO_EC_HUE,v_hue)==MPXP_Ok){ + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_HUE,v_hue)==MPXP_Ok){ #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1575,7 +1576,7 @@ else v_saturation+=v; if(v_saturation > 100) v_saturation = 100; if(v_saturation < -100) v_saturation = -100; - if(mpcv_set_colors(sh_video->decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok){ + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok){ #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1934,12 +1935,12 @@ /* Auto quality option enabled*/ MPXP_Rc rc; unsigned quality; - rc=mpcv_get_quality_max(sh_video->decoder,&quality); + rc=mpcv_get_quality_max(MPXPCtx->video.decoder,&quality); if(rc==MPXP_Ok) MPXPCtx->output_quality=quality; if(mp_conf.autoq>MPXPCtx->output_quality) mp_conf.autoq=MPXPCtx->output_quality; else MPXPCtx->output_quality=mp_conf.autoq; MSG_V("AutoQ: setting quality to %d\n",MPXPCtx->output_quality); - mpcv_set_quality(sh_video->decoder,MPXPCtx->output_quality); + mpcv_set_quality(MPXPCtx->video.decoder,MPXPCtx->output_quality); } vf_showlist(reinterpret_cast<vf_instance_t*>(sh_video->vfilter)); Modified: mplayerxp/mplayerxp.h =================================================================== --- mplayerxp/mplayerxp.h 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/mplayerxp.h 2012-11-30 11:24:40 UTC (rev 491) @@ -125,6 +125,10 @@ any_t* decoder; }; + struct video_processing_t { + any_t* decoder; + }; + struct MPXPSystem; /* non-configurable through command line stuff */ struct MPXPContext :public Opaque { @@ -143,6 +147,7 @@ struct MPXPSystem* MPXPSys; any_t* msg_priv; audio_processing_t& audio; + video_processing_t& video; }; extern MPXPContext* MPXPCtx; Modified: mplayerxp/xmpcore/xmp_vdecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-11-30 08:43:33 UTC (rev 490) +++ mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-11-30 11:24:40 UTC (rev 491) @@ -214,15 +214,15 @@ unsigned distance = dae_get_decoder_outrun(xp_core->video); int our_quality; our_quality = MPXPCtx->output_quality*distance/total; - if(drop_param) mpcv_set_quality(sh_video->decoder,0); + if(drop_param) mpcv_set_quality(MPXPCtx->video.decoder,0); else - if(mp_conf.autoq) mpcv_set_quality(sh_video->decoder,our_quality>0?our_quality:0); + if(mp_conf.autoq) mpcv_set_quality(MPXPCtx->video.decoder,our_quality>0?our_quality:0); } frame->flags=drop_param; - blit_frame=mpcv_decode(sh_video->decoder,frame); + blit_frame=mpcv_decode(MPXPCtx->video.decoder,frame); MSG_DBG2("DECODER: %i[%i] %f\n",dae_curr_vdecoded(xp_core),frame->len,frame->pts); if(MPXPCtx->output_quality) { - if(drop_param) mpcv_set_quality(sh_video->decoder,MPXPCtx->output_quality); + if(drop_param) mpcv_set_quality(MPXPCtx->video.decoder,MPXPCtx->output_quality); } if(!blit_frame && drop_param) priv->dae->num_dropped_frames++; if(blit_frame) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-30 13:31:49
|
Revision: 492 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=492&view=rev Author: nickols_k Date: 2012-11-30 13:31:41 +0000 (Fri, 30 Nov 2012) Log Message: ----------- improve readability of sources Modified Paths: -------------- mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-11-30 11:24:40 UTC (rev 491) +++ mplayerxp/mplayerxp.cpp 2012-11-30 13:31:41 UTC (rev 492) @@ -136,19 +136,55 @@ PT_UP_PREV =-3 }; +struct osd_args_t { + int visible; + int info_factor; +}; + +struct input_state_t { + int need_repaint; + int after_dvdmenu; + int next_file; +}; + struct MPXPSystem { public: MPXPSystem():inited_flags(0),osd_function(OSD_PLAY) { rnd_fill(antiviral_hole,reinterpret_cast<long>(&_demuxer)-reinterpret_cast<long>(&antiviral_hole)); } - ~MPXPSystem() {} + virtual ~MPXPSystem() {} void uninit_player(unsigned int mask); demuxer_t* demuxer() const { return _demuxer; } demuxer_t* assign_demuxer(demuxer_t* _d) { uninit_demuxer(); _demuxer=_d; if(_d) inited_flags|=INITED_DEMUXER; return _demuxer; } any_t* libinput() const { return _libinput; } - any_t* assign_libinput(any_t* _d) { uninit_input(); _libinput=_d; if(_d) inited_flags|=INITED_INPUT; return _libinput; } void uninit_demuxer(); void uninit_input(); + int libmpdemux_was_interrupted(int eof) const; + void seek(osd_args_t *osd,const seek_args_t* seek) const; + void init_keyboard_fifo(); + char* init_output_subsystems(); + int init_vobsub(const char *filename); + void init_dvd_nls() const; + + int handle_playlist(const char *filename) const; + + void print_stream_formats() const; + void print_audio_status() const; + void read_video_properties() const; + void read_subtitles(const char *filename,int forced_subs_only,int stream_dump_type); + + void find_acodec(const char *ao_subdevice); + int configure_audio(); + + MPXP_Rc find_vcodec(); + + void run_ahead_engine(); + +#ifdef USE_OSD + int paint_osd(int* osd_visible,int* in_pause); +#endif + int handle_input(seek_args_t* seek,osd_args_t* osd,input_state_t* state); + unsigned inited_flags; int vo_inited; MPXP_Rc ao_inited; @@ -156,6 +192,7 @@ int osd_function; play_tree_t* playtree; private: + any_t* assign_libinput(any_t* _d) { uninit_input(); _libinput=_d; if(_d) inited_flags|=INITED_INPUT; return _libinput; } char antiviral_hole[RND_CHAR0]; demuxer_t* _demuxer; any_t* _libinput; @@ -199,16 +236,18 @@ MP_Config mp_conf; MPXPContext::MPXPContext() - :audio(*new(zeromem) audio_processing_t), + :MPXPSys(*new(zeromem)MPXPSystem), + audio(*new(zeromem) audio_processing_t), video(*new(zeromem) video_processing_t) { seek_time=-1; bench=new(zeromem) time_usage_t; use_pts_fix2=-1; rtc_fd=-1; - MPXPSys=new(zeromem)MPXPSystem; } +MPXPContext::~MPXPContext() { delete bench; } + static volatile char antiviral_hole2[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; MPXPContext* MPXPCtx=NULL; xp_core_t* xp_core=NULL; @@ -271,8 +310,6 @@ #ifdef ENABLE_WIN32LOADER free_codec_cfg(); #endif - delete MPXPCtx->bench; - delete MPXPCtx->MPXPSys; delete MPXPCtx; if(vo_data) delete vo_data; if(ao_data) delete ao_data; @@ -386,7 +423,7 @@ fflush(stdout); fflush(stderr); - MPXPCtx->MPXPSys->uninit_player(INITED_ALL); + MPXPCtx->MPXPSys.uninit_player(INITED_ALL); MP_UNIT("exit_player"); @@ -453,11 +490,10 @@ // When libmpdemux perform a blocking operation (network connection or cache filling) // if the operation fail we use this function to check if it was interrupted by the user. // The function return a new value for eof. -static int libmpdemux_was_interrupted(int eof) +int MPXPSystem::libmpdemux_was_interrupted(int eof) const { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; mp_cmd_t* cmd; - if((cmd = mp_input_get_cmd(MPXPSys->libinput(),0,0,0)) != NULL) { + if((cmd = mp_input_get_cmd(_libinput,0,0,0)) != NULL) { switch(cmd->id) { case MP_CMD_QUIT: case MP_CMD_SOFT_QUIT: // should never happen @@ -603,9 +639,9 @@ } void show_long_help(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; m_config_show_options(MPXPCtx->mconfig); - mp_input_print_binds(MPXPSys->libinput()); + mp_input_print_binds(MPXPSys.libinput()); print_stream_drivers(); vo_data->print_help(); ao_print_help(); @@ -632,30 +668,30 @@ //================= Update OSD ==================== void update_osd( float v_pts ) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; static char osd_text_buffer[64]; static int osd_last_pts=-303; //================= Update OSD ==================== if(mp_conf.osd_level>=2){ - int pts=(mp_conf.osd_level==3&&MPXPSys->demuxer()->movi_length!=UINT_MAX)?MPXPSys->demuxer()->movi_length-v_pts:v_pts; - int addon=(mp_conf.osd_level==3&&MPXPSys->demuxer()->movi_length!=UINT_MAX)?-1:1; + int pts=(mp_conf.osd_level==3&&MPXPSys.demuxer()->movi_length!=UINT_MAX)?MPXPSys.demuxer()->movi_length-v_pts:v_pts; + int addon=(mp_conf.osd_level==3&&MPXPSys.demuxer()->movi_length!=UINT_MAX)?-1:1; char osd_text_tmp[64]; if(pts==osd_last_pts-addon) { - if(mp_conf.osd_level==3&&MPXPSys->demuxer()->movi_length!=UINT_MAX) ++pts; + if(mp_conf.osd_level==3&&MPXPSys.demuxer()->movi_length!=UINT_MAX) ++pts; else --pts; } else osd_last_pts=pts; vo_data->osd_text=osd_text_buffer; - if (MPXPSys->osd_show_framedrop) { + if (MPXPSys.osd_show_framedrop) { sprintf(osd_text_tmp, "Framedrop: %s",mp_conf.frame_dropping>1?"hard":mp_conf.frame_dropping?"vo":"none"); - MPXPSys->osd_show_framedrop--; + MPXPSys.osd_show_framedrop--; } else #ifdef ENABLE_DEC_AHEAD_DEBUG - if(mp_conf.verbose) sprintf(osd_text_tmp,"%c %02d:%02d:%02d",MPXPSys->osd_function,pts/3600,(pts/60)%60,pts%60); - else sprintf(osd_text_tmp,"%c %02d:%02d:%02d",MPXPSys->osd_function,pts/3600,(pts/60)%60,pts%60); + if(mp_conf.verbose) sprintf(osd_text_tmp,"%c %02d:%02d:%02d",MPXPSys.osd_function,pts/3600,(pts/60)%60,pts%60); + else sprintf(osd_text_tmp,"%c %02d:%02d:%02d",MPXPSys.osd_function,pts/3600,(pts/60)%60,pts%60); #else - sprintf(osd_text_tmp,"%c %02d:%02d:%02d",MPXPSys->osd_function,pts/3600,(pts/60)%60,pts%60); + sprintf(osd_text_tmp,"%c %02d:%02d:%02d",MPXPSys.osd_function,pts/3600,(pts/60)%60,pts%60); #endif if(strcmp(vo_data->osd_text, osd_text_tmp)) { strcpy(vo_data->osd_text, osd_text_tmp); @@ -669,21 +705,16 @@ } } #endif -typedef struct osd_args_s { - int visible; - int info_factor; -}osd_args_t; -void mpxp_seek( osd_args_t *osd,const seek_args_t* seek) +void MPXPSystem::seek( osd_args_t *osd,const seek_args_t* _seek) const { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); - demux_stream_t *d_dvdsub=MPXPSys->demuxer()->sub; + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); + demux_stream_t *d_dvdsub=_demuxer->sub; int seek_rval=1; xp_core->audio->eof=0; - if(seek->secs || seek->flags&DEMUX_SEEK_SET) { - seek_rval=demux_seek_r(MPXPSys->demuxer(),seek); + if(_seek->secs || _seek->flags&DEMUX_SEEK_SET) { + seek_rval=demux_seek_r(_demuxer,_seek); MPXPCtx->mpxp_after_seek=25; /* 1 sec delay */ } if(seek_rval){ @@ -715,17 +746,17 @@ if (vo_data->vobsub) { MP_UNIT("seek_vobsub_reset"); - vobsub_seek_r(vo_data->vobsub, seek); + vobsub_seek_r(vo_data->vobsub, _seek); } #ifdef USE_OSD // Set OSD: if(mp_conf.osd_level){ - int len=((MPXPSys->demuxer()->movi_end-MPXPSys->demuxer()->movi_start)>>8); + int len=((_demuxer->movi_end-_demuxer->movi_start)>>8); if (len>0){ if(osd) osd->visible=sh_video->fps<=60?sh_video->fps:25; vo_data->osd_progbar_type=0; - vo_data->osd_progbar_value=(MPXPSys->demuxer()->filepos-MPXPSys->demuxer()->movi_start)/len; + vo_data->osd_progbar_value=(_demuxer->filepos-_demuxer->movi_start)/len; vo_osd_changed(OSDTYPE_PROGBAR); } } @@ -747,10 +778,10 @@ void mpxp_reset_vcache(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); - seek_args_t seek = { 0, DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS }; - if(sh_video) mpxp_seek(NULL,&seek); + MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys.demuxer()->video->sh); + seek_args_t _seek = { 0, DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS }; + if(sh_video) MPXPSys.seek(NULL,&_seek); return; } @@ -807,8 +838,8 @@ static void show_benchmark_status(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); + MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys.demuxer()->audio->sh); if(xmp_test_model(XMP_Run_AudioPlayback)) MSG_STATUS("A:%6.1f %4.1f%%\r" ,sh_audio->timer-ao_get_delay(ao_data) @@ -825,22 +856,21 @@ // for multifile support: play_tree_iter_t* playtree_iter = NULL; -static void mpxp_init_keyboard_fifo(void) +void MPXPSystem::init_keyboard_fifo() { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; #ifdef HAVE_TERMCAP load_termcap(NULL); // load key-codes #endif /* Init input system */ MP_UNIT("init_input"); - MPXPSys->assign_libinput(mp_input_open()); + assign_libinput(mp_input_open()); } void mplayer_put_key(int code){ - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; mp_cmd_t* cmd; - cmd=mp_input_get_cmd_from_keys(MPXPSys->libinput(),1,&code); - mp_input_queue_cmd(MPXPSys->libinput(),cmd); + cmd=mp_input_get_cmd_from_keys(MPXPSys.libinput(),1,&code); + mp_input_queue_cmd(MPXPSys.libinput(),cmd); } @@ -875,15 +905,14 @@ vo_init_osd(); } -static char * mpxp_init_output_subsystems(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; +char* MPXPSystem::init_output_subsystems() { char* rs=NULL; unsigned i; // check video_out driver name: MP_UNIT("vo_init"); - MPXPSys->vo_inited = (vo_data->init(mp_conf.video_driver)!=NULL)?1:0; + vo_inited = (vo_data->init(mp_conf.video_driver)!=NULL)?1:0; - if(!MPXPSys->vo_inited){ + if(!vo_inited){ MSG_FATAL(MSGTR_InvalidVOdriver,mp_conf.video_driver?mp_conf.video_driver:"?"); exit_player(MSGTR_Exit_error); } @@ -897,7 +926,7 @@ if (mp_conf.audio_driver[i] == ':') { - rs = (char *)mp_malloc(i2-i); + rs = new char [i2-i]; if (rs != NULL) strncpy(rs, (char *)(mp_conf.audio_driver+i+1), i2-i); mp_conf.audio_driver[i] = '\0'; } @@ -905,8 +934,7 @@ return rs; } -static int mpxp_init_vobsub(const char *filename) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; +int MPXPSystem::init_vobsub(const char *filename) { int forced_subs_only=0; MP_UNIT("vobsub"); if (mp_conf.vobsub_name){ @@ -914,14 +942,14 @@ if(vo_data->vobsub==NULL) MSG_ERR(MSGTR_CantLoadSub,mp_conf.vobsub_name); else { - MPXPSys->inited_flags|=INITED_VOBSUB; + inited_flags|=INITED_VOBSUB; vobsub_set_from_lang(vo_data->vobsub, mp_conf.dvdsub_lang); // check if vobsub requested only to display forced subtitles forced_subs_only=vobsub_get_forced_subs_flag(vo_data->vobsub); } }else if(mp_conf.sub_auto && filename && (strlen(filename)>=5)){ /* try to autodetect vobsub from movie filename ::atmos */ - char *buf = (char *)mp_mallocz((strlen(filename)-3) * sizeof(char)); + char *buf = new(zeromem) char[strlen(filename)-3]; strncpy(buf, filename, strlen(filename)-4); vo_data->vobsub=vobsub_open(buf,mp_conf.spudec_ifo,0,&vo_data->spudec); delete buf; @@ -929,20 +957,19 @@ if(vo_data->vobsub) { mp_conf.sub_auto=0; // don't do autosub for textsubs if vobsub found - MPXPSys->inited_flags|=INITED_VOBSUB; + inited_flags|=INITED_VOBSUB; } return forced_subs_only; } -static int mpxp_handle_playlist(const char *filename) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - stream_t* stream=MPXPSys->demuxer()->stream; +int MPXPSystem::handle_playlist(const char *filename) const { + stream_t* stream=_demuxer->stream; int eof=0; play_tree_t* entry; // Handle playlist MP_UNIT("handle_playlist"); MSG_V("Parsing playlist %s...\n",filename); - entry = parse_playtree(MPXPSys->libinput(),stream); + entry = parse_playtree(_libinput,stream); if(!entry) { entry = playtree_iter->tree; if(play_tree_iter_step(playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { @@ -970,15 +997,14 @@ return eof; } -static void mpxp_init_dvd_nls(void) { +void MPXPSystem::init_dvd_nls() const { /* Add NLS support here */ - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - stream_t* stream=MPXPSys->demuxer()->stream; + stream_t* stream=_demuxer->stream; char *lang; if(!mp_conf.audio_lang) mp_conf.audio_lang=nls_get_screen_cp(); MP_UNIT("dvd lang->id"); if(mp_conf.audio_lang) { - lang=(char *)mp_malloc(std::max(strlen(mp_conf.audio_lang)+1,size_t(4))); + lang=new char [std::max(strlen(mp_conf.audio_lang)+1,size_t(4))]; strcpy(lang,mp_conf.audio_lang); if(mp_conf.audio_id==-1 && stream_control(stream,SCTRL_LNG_GET_AID,lang)==MPXP_Ok) { mp_conf.audio_id=*(int *)lang; @@ -986,7 +1012,7 @@ delete lang; } if(mp_conf.dvdsub_lang) { - lang=(char *)mp_malloc(std::max(strlen(mp_conf.dvdsub_lang)+1,size_t(4))); + lang=new char [std::max(strlen(mp_conf.dvdsub_lang)+1,size_t(4))]; strcpy(lang,mp_conf.dvdsub_lang); if(mp_conf.dvdsub_id==-1 && stream_control(stream,SCTRL_LNG_GET_SID,lang)==MPXP_Ok) { mp_conf.dvdsub_id=*(int *)lang; @@ -995,10 +1021,9 @@ } } -static void mpxp_print_stream_formats(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); +void MPXPSystem::print_stream_formats() const { + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); int fmt; char *c; MSG_INFO("[Stream]:"); @@ -1024,10 +1049,9 @@ MSG_INFO("\n"); } -static void mpxp_read_video_properties(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); - demux_stream_t *d_video=MPXPSys->demuxer()->video; +void MPXPSystem::read_video_properties() const { + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); + demux_stream_t *d_video=_demuxer->video; MP_UNIT("video_read_properties"); if(!video_read_properties(sh_video)) { MSG_ERR("Video: can't read properties\n"); @@ -1035,7 +1059,7 @@ sh_video=reinterpret_cast<sh_video_t*>(d_video->sh); } else { MSG_V("[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n", - MPXPSys->demuxer()->file_format,sh_video->fourcc, sh_video->src_w,sh_video->src_h, + _demuxer->file_format,sh_video->fourcc, sh_video->src_w,sh_video->src_h, sh_video->fps,1/sh_video->fps ); /* need to set fps here for output encoders to pick it up in their init */ @@ -1051,10 +1075,9 @@ } } -static void mpxp_read_subtitles(const char *filename,int forced_subs_only,int stream_dump_type) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); - stream_t* stream=MPXPSys->demuxer()->stream; +void MPXPSystem::read_subtitles(const char *filename,int forced_subs_only,int stream_dump_type) { + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); + stream_t* stream=_demuxer->stream; if (mp_conf.spudec_ifo) { unsigned int palette[16], width, height; MP_UNIT("spudec_init_vobsub"); @@ -1076,7 +1099,7 @@ } if (vo_data->spudec!=NULL) { - MPXPSys->inited_flags|=INITED_SPUDEC; + inited_flags|=INITED_SPUDEC; // Apply current settings for forced subs spudec_set_forced_subs_only(vo_data->spudec,forced_subs_only); } @@ -1094,18 +1117,17 @@ : "default.sub", sh_video->fps ); } if(MPXPCtx->subtitles) { - MPXPSys->inited_flags|=INITED_SUBTITLE; + inited_flags|=INITED_SUBTITLE; if(stream_dump_type>1) list_sub_file(MPXPCtx->subtitles); } #endif } -static void mpxp_find_acodec(const char *ao_subdevice) { +void MPXPSystem::find_acodec(const char *ao_subdevice) { int found=0; any_t* mpca=0; - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - demux_stream_t *d_audio=MPXPSys->demuxer()->audio; + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); + demux_stream_t *d_audio=_demuxer->audio; sh_audio->codec=NULL; mpca=mpca_init(sh_audio); // try auto-probe first if(mpca) { MPXPCtx->audio.decoder=mpca; found=1; } @@ -1156,18 +1178,17 @@ sh_audio=reinterpret_cast<sh_audio_t*>(d_audio->sh); } if(ao_subdevice) delete ao_subdevice; - MPXPSys->ao_inited=ao_register(ao_data,mp_conf.audio_driver,0); - if (MPXPSys->ao_inited!=MPXP_Ok){ + ao_inited=ao_register(ao_data,mp_conf.audio_driver,0); + if (ao_inited!=MPXP_Ok){ MSG_FATAL(MSGTR_InvalidAOdriver,mp_conf.audio_driver); exit_player(MSGTR_Exit_error); } } } -static MPXP_Rc mpxp_find_vcodec(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - demux_stream_t *d_video=MPXPSys->demuxer()->video; - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); +MPXP_Rc MPXPSystem::find_vcodec(void) { + demux_stream_t *d_video=_demuxer->video; + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); MPXP_Rc rc=MPXP_Ok; MP_UNIT("init_video_codec"); sh_video->inited=0; @@ -1177,7 +1198,7 @@ if(vo_conf.softzoom) vo_data->ZOOM_SET(); if(vo_conf.flip>0) vo_data->FLIP_SET(); if(vo_conf.vidmode) vo_data->VM_SET(); - if((MPXPCtx->video.decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,MPXPSys->libinput()))) sh_video->inited=1; + if((MPXPCtx->video.decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,_libinput))) sh_video->inited=1; #ifdef ENABLE_WIN32LOADER if(!sh_video->inited) { /* Go through the codec.conf and find the best codec...*/ @@ -1185,20 +1206,20 @@ if(mp_conf.video_codec) { /* forced codec by name: */ MSG_INFO("Forced video codec: %s\n",mp_conf.video_codec); - sh_video->decoder=mpcv_init(sh_video,mp_conf.video_codec,NULL,-1,MPXPSys->libinput()); + sh_video->decoder=mpcv_init(sh_video,mp_conf.video_codec,NULL,-1,_libinput); } else { int status; /* try in stability order: UNTESTED, WORKING, BUGGY, BROKEN */ if(mp_conf.video_family) MSG_INFO(MSGTR_TryForceVideoFmt,mp_conf.video_family); for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status){ if(mp_conf.video_family) /* try first the preferred codec family:*/ - if((sh_video->decoder=mpcv_init(sh_video,NULL,mp_conf.video_family,status,MPXPSys->libinput()))) break; - if((sh_video->decoder=mpcv_init(sh_video,NULL,NULL,status,MPXPSys->libinput()))) break; + if((sh_video->decoder=mpcv_init(sh_video,NULL,mp_conf.video_family,status,_libinput))) break; + if((sh_video->decoder=mpcv_init(sh_video,NULL,NULL,status,_libinput))) break; } } } /* Use lavc decoders as last hope */ - if(!sh_video->inited) MPXPCtx->video.decoder=mpcv_lavc_init(sh_video,MPXPSys->libinput()); + if(!sh_video->inited) MPXPCtx->video.decoder=mpcv_lavc_init(sh_video,_libinput); #endif if(!sh_video->inited) { @@ -1213,7 +1234,7 @@ d_video->sh = NULL; sh_video = reinterpret_cast<sh_video_t*>(d_video->sh); rc=MPXP_False; - } else MPXPSys->inited_flags|=INITED_VCODEC; + } else inited_flags|=INITED_VCODEC; if(sh_video) MSG_V("%s video codec: [%s] vfm:%s (%s)\n", @@ -1221,11 +1242,10 @@ return rc; } -static int mpxp_configure_audio(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); - demux_stream_t *d_audio=MPXPSys->demuxer()->audio; +int MPXPSystem::configure_audio() { + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); + demux_stream_t *d_audio=_demuxer->audio; int rc=0; const ao_info_t *info=ao_get_info(ao_data); MP_UNIT("setup_audio"); @@ -1272,7 +1292,7 @@ sh_audio=reinterpret_cast<sh_audio_t*>(d_audio->sh); if(sh_video == NULL) rc=-1; } else { - MPXPSys->inited_flags|=INITED_AO; + inited_flags|=INITED_AO; MP_UNIT("af_init"); if(mpca_init_filters(sh_audio, sh_audio->rate, @@ -1285,10 +1305,9 @@ return rc; } -static void mpxp_run_ahead_engine(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); +void MPXPSystem::run_ahead_engine() { + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); MP_UNIT("init_xp"); if(sh_video && xp_core->num_v_buffs < 3) {/* we need at least 3 buffers to suppress screen judering */ MSG_FATAL("Not enough buffers for DECODING AHEAD!\nNeed %u buffers but exist only %u\n",3,xp_core->num_v_buffs); @@ -1302,22 +1321,21 @@ else MSG_OK("Using DECODING AHEAD mplayer's core with %u audio buffers\n",xp_core->num_a_buffs); /* reset counters */ if(sh_video) xp_core->video->num_dropped_frames=0; - MPXPSys->inited_flags|=INITED_XMP; + inited_flags|=INITED_XMP; } -static void mpxp_print_audio_status(void) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); +void MPXPSystem::print_audio_status() const { + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); /* PAINT audio OSD */ unsigned ipts,rpts; unsigned char h,m,s,rh,rm,rs; static char ph=0,pm=0,ps=0; ipts=(unsigned)(sh_audio->timer-ao_get_delay(ao_data)); - rpts=MPXPSys->demuxer()->movi_length-ipts; + rpts=_demuxer->movi_length-ipts; h = ipts/3600; m = (ipts/60)%60; s = ipts%60; - if(MPXPSys->demuxer()->movi_length!=UINT_MAX) { + if(_demuxer->movi_length!=UINT_MAX) { rh = rpts/3600; rm = (rpts/60)%60; rs = rpts%60; @@ -1331,21 +1349,20 @@ } #ifdef USE_OSD -static int mpxp_paint_osd(int* osd_visible,int* in_pause) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - const stream_t* stream=MPXPSys->demuxer()->stream; - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); +int MPXPSystem::paint_osd(int* osd_visible,int* in_pause) { + const stream_t* stream=_demuxer->stream; + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); int rc=0; if(*osd_visible) { if (!--(*osd_visible)) { vo_data->osd_progbar_type=-1; // disable vo_osd_changed(OSDTYPE_PROGBAR); - if (!((MPXPSys->osd_function == OSD_PAUSE)||(MPXPSys->osd_function==OSD_DVDMENU))) - MPXPSys->osd_function = OSD_PLAY; + if (!((osd_function == OSD_PAUSE)||(osd_function==OSD_DVDMENU))) + osd_function = OSD_PLAY; } } - if(MPXPSys->osd_function==OSD_DVDMENU) { + if(osd_function==OSD_DVDMENU) { rect_highlight_t hl; if(stream_control(stream,SCTRL_VID_GET_HILIGHT,&hl)==MPXP_Ok) { osd_set_nav_box (hl.sx, hl.sy, hl.ex, hl.ey); @@ -1353,9 +1370,9 @@ vo_osd_changed (OSDTYPE_DVDNAV); } } - if(MPXPSys->osd_function==OSD_PAUSE||MPXPSys->osd_function==OSD_DVDMENU) { + if(osd_function==OSD_PAUSE||osd_function==OSD_DVDMENU) { mp_cmd_t* cmd; - if (MPXPSys->vo_inited && sh_video) { + if (vo_inited && sh_video) { if(mp_conf.osd_level>1 && !*in_pause) { *in_pause = 1; return -1; @@ -1367,7 +1384,7 @@ fflush(stdout); } - if (MPXPSys->ao_inited==MPXP_Ok && sh_audio) { + if (ao_inited==MPXP_Ok && sh_audio) { if(xmp_test_model(XMP_Run_AudioPlayer)) { xp_core->in_pause=1; while( !dec_ahead_can_aseek ) yield_timeslice(); @@ -1375,25 +1392,25 @@ ao_pause(ao_data); // pause audio, keep data if possible } - while( (cmd = mp_input_get_cmd(MPXPSys->libinput(),20,1,1)) == NULL) { - if(sh_video && MPXPSys->vo_inited) vo_data->check_events(); + while( (cmd = mp_input_get_cmd(_libinput,20,1,1)) == NULL) { + if(sh_video && vo_inited) vo_data->check_events(); yield_timeslice(); } if (cmd && cmd->id == MP_CMD_PAUSE) { - cmd = mp_input_get_cmd(MPXPSys->libinput(),0,1,0); + cmd = mp_input_get_cmd(_libinput,0,1,0); mp_cmd_free(cmd); } - if(MPXPSys->osd_function==OSD_PAUSE) MPXPSys->osd_function=OSD_PLAY; - if (MPXPSys->ao_inited==MPXP_Ok && sh_audio) { + if(osd_function==OSD_PAUSE) osd_function=OSD_PLAY; + if (ao_inited==MPXP_Ok && sh_audio) { ao_resume(ao_data); // resume audio if(xmp_test_model(XMP_Run_AudioPlayer)) { xp_core->in_pause=0; __MP_SYNCHRONIZE(audio_play_mutex,pthread_cond_signal(&audio_play_cond)); } } - if (MPXPSys->vo_inited && sh_video) + if (vo_inited && sh_video) vo_data->resume(); // resume video *in_pause=0; (void)GetRelativeTime(); // keep TF around FT in next cycle @@ -1402,249 +1419,228 @@ } #endif -typedef struct input_state_s { - int need_repaint; - int after_dvdmenu; - int next_file; -}input_state_t; - -static int mpxp_handle_input(seek_args_t* seek,osd_args_t* osd,input_state_t* state) { - MPXPSystem*MPXPSys=MPXPCtx->MPXPSys; - stream_t* stream=MPXPSys->demuxer()->stream; - sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); - int v_bright=0; - int v_cont=0; - int v_hue=0; - int v_saturation=0; +int MPXPSystem::handle_input(seek_args_t* _seek,osd_args_t* osd,input_state_t* state) { + stream_t* stream=_demuxer->stream; + sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); + int v_bright=0; + int v_cont=0; + int v_hue=0; + int v_saturation=0; /* For future: int v_red_intensity=0; int v_green_intensity=0; int v_blue_intensity=0; */ - int eof=0; - mp_cmd_t* cmd; - while( (cmd = mp_input_get_cmd(MPXPSys->libinput(),0,0,0)) != NULL) { - switch(cmd->id) { - case MP_CMD_SEEK : { - int v,i_abs; - v = cmd->args[0].v.i; - i_abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; - if(i_abs) { - seek->flags = DEMUX_SEEK_SET|DEMUX_SEEK_PERCENTS; - if(sh_video) MPXPSys->osd_function= (v > dae_played_frame(xp_core->video).v_pts) ? OSD_FFW : OSD_REW; - seek->secs = v/100.; - } - else { - seek->flags = DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS; - if(sh_video) MPXPSys->osd_function= (v > 0) ? OSD_FFW : OSD_REW; - seek->secs+= v; - } - } break; - case MP_CMD_SPEED_INCR : - case MP_CMD_SPEED_MULT : - case MP_CMD_SPEED_SET : - MSG_WARN("Speed adjusting is not implemented yet!\n"); - break; - case MP_CMD_SWITCH_AUDIO : - MSG_INFO("ID_AUDIO_TRACK=%i\n",demuxer_switch_audio_r(MPXPSys->demuxer(), MPXPSys->demuxer()->audio->id+1)); - break; - case MP_CMD_SWITCH_VIDEO : - MSG_INFO("ID_VIDEO_TRACK=%i\n",demuxer_switch_video_r(MPXPSys->demuxer(), MPXPSys->demuxer()->video->id+1)); - break; - case MP_CMD_SWITCH_SUB : - MSG_INFO("ID_SUB_TRACK=%i\n",demuxer_switch_subtitle_r(MPXPSys->demuxer(), MPXPSys->demuxer()->sub->id+1)); - break; - case MP_CMD_FRAME_STEP : - case MP_CMD_PAUSE : { - MPXPSys->osd_function=OSD_PAUSE; - } break; - case MP_CMD_SOFT_QUIT : { - exit_player(MSGTR_Exit_quit); - break; - } - case MP_CMD_QUIT : { - exit_player(MSGTR_Exit_quit); - } - case MP_CMD_PLAY_TREE_STEP : { - int n = cmd->args[0].v.i > 0 ? 1 : -1; - play_tree_iter_t* it = play_tree_iter_new_copy(playtree_iter); + int eof=0; + mp_cmd_t* cmd; + while( (cmd = mp_input_get_cmd(_libinput,0,0,0)) != NULL) { + switch(cmd->id) { + case MP_CMD_SEEK : { + int v,i_abs; + v = cmd->args[0].v.i; + i_abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; + if(i_abs) { + _seek->flags = DEMUX_SEEK_SET|DEMUX_SEEK_PERCENTS; + if(sh_video) osd_function= (v > dae_played_frame(xp_core->video).v_pts) ? OSD_FFW : OSD_REW; + _seek->secs = v/100.; + } else { + _seek->flags = DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS; + if(sh_video) osd_function= (v > 0) ? OSD_FFW : OSD_REW; + _seek->secs+= v; + } + } break; + case MP_CMD_SPEED_INCR : + case MP_CMD_SPEED_MULT : + case MP_CMD_SPEED_SET : + MSG_WARN("Speed adjusting is not implemented yet!\n"); + break; + case MP_CMD_SWITCH_AUDIO : + MSG_INFO("ID_AUDIO_TRACK=%i\n",demuxer_switch_audio_r(_demuxer, _demuxer->audio->id+1)); + break; + case MP_CMD_SWITCH_VIDEO : + MSG_INFO("ID_VIDEO_TRACK=%i\n",demuxer_switch_video_r(_demuxer, _demuxer->video->id+1)); + break; + case MP_CMD_SWITCH_SUB : + MSG_INFO("ID_SUB_TRACK=%i\n",demuxer_switch_subtitle_r(_demuxer, _demuxer->sub->id+1)); + break; + case MP_CMD_FRAME_STEP : + case MP_CMD_PAUSE : + osd_function=OSD_PAUSE; + break; + case MP_CMD_SOFT_QUIT : + exit_player(MSGTR_Exit_quit); + case MP_CMD_QUIT : + exit_player(MSGTR_Exit_quit); + case MP_CMD_PLAY_TREE_STEP : { + int n = cmd->args[0].v.i > 0 ? 1 : -1; + play_tree_iter_t* it = play_tree_iter_new_copy(playtree_iter); - if(play_tree_iter_step(it,n,0) == PLAY_TREE_ITER_ENTRY) - eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; - play_tree_iter_free(it); - } break; - case MP_CMD_PLAY_TREE_UP_STEP : { - int n = cmd->args[0].v.i > 0 ? 1 : -1; - play_tree_iter_t* it = play_tree_iter_new_copy(playtree_iter); - if(play_tree_iter_up_step(it,n,0) == PLAY_TREE_ITER_ENTRY) - eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; - play_tree_iter_free(it); - } break; - case MP_CMD_PLAY_ALT_SRC_STEP : { - if(playtree_iter->num_files > 1) { - int v = cmd->args[0].v.i; - if(v > 0 && playtree_iter->file < playtree_iter->num_files) - eof = PT_NEXT_SRC; - else if(v < 0 && playtree_iter->file > 1) - eof = PT_PREV_SRC; - } - } break; - case MP_CMD_OSD : - if(sh_video) { - int v = cmd->args[0].v.i; - if(v < 0) - mp_conf.osd_level=(mp_conf.osd_level+1)%4; - else - mp_conf.osd_level= v > 3 ? 3 : v; - } break; - case MP_CMD_MUTE: - mixer_mute(ao_data); - break; - case MP_CMD_VOLUME : { - int v = cmd->args[0].v.i; - if(v > 0) - mixer_incvolume(ao_data); - else - mixer_decvolume(ao_data); + if(play_tree_iter_step(it,n,0) == PLAY_TREE_ITER_ENTRY) + eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; + play_tree_iter_free(it); + } break; + case MP_CMD_PLAY_TREE_UP_STEP : { + int n = cmd->args[0].v.i > 0 ? 1 : -1; + play_tree_iter_t* it = play_tree_iter_new_copy(playtree_iter); + if(play_tree_iter_up_step(it,n,0) == PLAY_TREE_ITER_ENTRY) + eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; + play_tree_iter_free(it); + } break; + case MP_CMD_PLAY_ALT_SRC_STEP : + if(playtree_iter->num_files > 1) { + int v = cmd->args[0].v.i; + if(v > 0 && playtree_iter->file < playtree_iter->num_files) + eof = PT_NEXT_SRC; + else if(v < 0 && playtree_iter->file > 1) + eof = PT_PREV_SRC; + } + break; + case MP_CMD_OSD : + if(sh_video) { + int v = cmd->args[0].v.i; + if(v < 0) mp_conf.osd_level=(mp_conf.osd_level+1)%4; + else mp_conf.osd_level= v > 3 ? 3 : v; + } + break; + case MP_CMD_MUTE: + mixer_mute(ao_data); + break; + case MP_CMD_VOLUME : { + int v = cmd->args[0].v.i; + if(v > 0) mixer_incvolume(ao_data); + else mixer_decvolume(ao_data); #ifdef USE_OSD - if(mp_conf.osd_level){ - osd->visible=sh_video->fps; // 1 sec - vo_data->osd_progbar_type=OSD_VOLUME; - vo_data->osd_progbar_value=(mixer_getbothvolume(ao_data)*256.0)/100.0; - vo_osd_changed(OSDTYPE_PROGBAR); - } + if(mp_conf.osd_level){ + osd->visible=sh_video->fps; // 1 sec + vo_data->osd_progbar_type=OSD_VOLUME; + vo_data->osd_progbar_value=(mixer_getbothvolume(ao_data)*256.0)/100.0; + vo_osd_changed(OSDTYPE_PROGBAR); + } #endif - } break; - case MP_CMD_CONTRAST : { - int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; - if(i_abs) v_cont=v; - else v_cont+=v; - if(v_cont > 100) v_cont=100; - if(v_cont < -100) v_cont = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok){ + } break; + case MP_CMD_CONTRAST : { + int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; + if(i_abs) v_cont=v; + else v_cont+=v; + if(v_cont > 100) v_cont=100; + if(v_cont < -100) v_cont = -100; + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok) { #ifdef USE_OSD - if(mp_conf.osd_level){ - osd->visible=sh_video->fps; // 1 sec - vo_data->osd_progbar_type=OSD_CONTRAST; - vo_data->osd_progbar_value=((v_cont)<<8)/100; - vo_data->osd_progbar_value = ((v_cont+100)<<8)/200; - vo_osd_changed(OSDTYPE_PROGBAR); - } + if(mp_conf.osd_level){ + osd->visible=sh_video->fps; // 1 sec + vo_data->osd_progbar_type=OSD_CONTRAST; + vo_data->osd_progbar_value=((v_cont)<<8)/100; + vo_data->osd_progbar_value = ((v_cont+100)<<8)/200; + vo_osd_changed(OSDTYPE_PROGBAR); + } #endif - } - } break; - case MP_CMD_BRIGHTNESS : { - int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; - if(i_abs)v_bright=v; - else v_bright+=v; - if(v_bright > 100) v_bright = 100; - if(v_bright < -100) v_bright = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok){ + } + } break; + case MP_CMD_BRIGHTNESS : { + int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; + if(i_abs) v_bright=v; + else v_bright+=v; + if(v_bright > 100) v_bright = 100; + if(v_bright < -100) v_bright = -100; + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok) { #ifdef USE_OSD - if(mp_conf.osd_level){ - osd->visible=sh_video->fps; // 1 sec - vo_data->osd_progbar_type=OSD_BRIGHTNESS; - vo_data->osd_progbar_value=((v_bright)<<8)/100; - vo_data->osd_progbar_value = ((v_bright+100)<<8)/200; - vo_osd_changed(OSDTYPE_PROGBAR); - } + if(mp_conf.osd_level){ + osd->visible=sh_video->fps; // 1 sec + vo_data->osd_progbar_type=OSD_BRIGHTNESS; + vo_data->osd_progbar_value=((v_bright)<<8)/100; + vo_data->osd_progbar_value = ((v_bright+100)<<8)/200; + vo_osd_changed(OSDTYPE_PROGBAR); + } #endif - } - } break; - case MP_CMD_HUE : { - int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; - if(i_abs) v_hue=v; - else v_hue+=v; - if(v_hue > 100) v_hue = 100; - if(v_hue < -100) v_hue = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_HUE,v_hue)==MPXP_Ok){ + } + } break; + case MP_CMD_HUE : { + int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; + if(i_abs) v_hue=v; + else v_hue+=v; + if(v_hue > 100) v_hue = 100; + if(v_hue < -100) v_hue = -100; + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_HUE,v_hue)==MPXP_Ok) { #ifdef USE_OSD - if(mp_conf.osd_level){ - osd->visible=sh_video->fps; // 1 sec - vo_data->osd_progbar_type=OSD_HUE; - vo_data->osd_progbar_value=((v_hue)<<8)/100; - vo_data->osd_progbar_value = ((v_hue+100)<<8)/200; - vo_osd_changed(OSDTYPE_PROGBAR); - } + if(mp_conf.osd_level){ + osd->visible=sh_video->fps; // 1 sec + vo_data->osd_progbar_type=OSD_HUE; + vo_data->osd_progbar_value=((v_hue)<<8)/100; + vo_data->osd_progbar_value = ((v_hue+100)<<8)/200; + vo_osd_changed(OSDTYPE_PROGBAR); + } #endif - } - } break; - case MP_CMD_SATURATION : { - int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; - if(i_abs) v_saturation=v; - else v_saturation+=v; - if(v_saturation > 100) v_saturation = 100; - if(v_saturation < -100) v_saturation = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok){ + } + } break; + case MP_CMD_SATURATION : { + int v = cmd->args[0].v.i, i_abs = cmd->args[1].v.i; + if(i_abs) v_saturation=v; + else v_saturation+=v; + if(v_saturation > 100) v_saturation = 100; + if(v_saturation < -100) v_saturation = -100; + if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok) { #ifdef USE_OSD - if(mp_conf.osd_level){ - osd->visible=sh_video->fps; // 1 sec - vo_data->osd_progbar_type=OSD_SATURATION; - vo_data->osd_progbar_value=((v_saturation)<<8)/100; - vo_data->osd_progbar_value = ((v_saturation+100)<<8)/200; - vo_osd_changed(OSDTYPE_PROGBAR); - } + if(mp_conf.osd_level){ + osd->visible=sh_video->fps; // 1 sec + vo_data->osd_progbar_type=OSD_SATURATION; + vo_data->osd_progbar_value=((v_saturation)<<8)/100; + vo_data->osd_progbar_value = ((v_saturation+100)<<8)/200; + vo_osd_changed(OSDTYPE_PROGBAR); + } #endif - } - } break; - case MP_CMD_FRAMEDROPPING : { - int v = cmd->args[0].v.i; - if(v < 0) - mp_conf.frame_dropping = (mp_conf.frame_dropping+1)%3; - else - mp_conf.frame_dropping = v > 2 ? 2 : v; - MPXPSys->osd_show_framedrop = osd->info_factor; - } break; - case MP_CMD_TV_STEP_CHANNEL: - if(cmd->args[0].v.i > 0) cmd->id=MP_CMD_TV_STEP_CHANNEL_UP; - else cmd->id=MP_CMD_TV_STEP_CHANNEL_DOWN; - case MP_CMD_TV_STEP_NORM: - case MP_CMD_TV_STEP_CHANNEL_LIST: - stream_control(stream,SCRTL_MPXP_CMD,(any_t*)cmd->id); - break; - case MP_CMD_DVDNAV: - if(stream_control(stream,SCRTL_MPXP_CMD,(any_t*)cmd->args[0].v.i)==MPXP_Ok) { - if(cmd->args[0].v.i!=MP_CMD_DVDNAV_SELECT) { -// seek->flags = DEMUX_SEEK_SET|DEMUX_SEEK_PERCENTS; -// seek->secs = 0.; - stream->type|=STREAMTYPE_MENU; - state->need_repaint=1; - } - MPXPSys->osd_function=OSD_DVDMENU; - if(cmd->args[0].v.i==MP_CMD_DVDNAV_SELECT) { - MPXPSys->osd_function=0; - state->need_repaint=1; - state->after_dvdmenu=1; - state->next_file=1; - return eof; -// goto goto_next_file; /* menu may have different size against of movie */ - } - } - break; - case MP_CMD_VO_FULLSCREEN: - vo_data->fullscreen(); - break; - case MP_CMD_VO_SCREENSHOT: - vo_data->screenshot(dae_curr_vplayed(xp_core)); - break; - case MP_CMD_SUB_POS: - { - int v; - v = cmd->args[0].v.i; + } + } break; + case MP_CMD_FRAMEDROPPING : { + int v = cmd->args[0].v.i; + if(v < 0) mp_conf.frame_dropping = (mp_conf.frame_dropping+1)%3; + else mp_conf.frame_dropping = v > 2 ? 2 : v; + osd_show_framedrop = osd->info_factor; + } break; + case MP_CMD_TV_STEP_CHANNEL: + if(cmd->args[0].v.i > 0)cmd->id=MP_CMD_TV_STEP_CHANNEL_UP; + else cmd->id=MP_CMD_TV_STEP_CHANNEL_DOWN; + case MP_CMD_TV_STEP_NORM: + case MP_CMD_TV_STEP_CHANNEL_LIST: + stream_control(stream,SCRTL_MPXP_CMD,(any_t*)cmd->id); + break; + case MP_CMD_DVDNAV: + if(stream_control(stream,SCRTL_MPXP_CMD,(any_t*)cmd->args[0].v.i)==MPXP_Ok) { + if(cmd->args[0].v.i!=MP_CMD_DVDNAV_SELECT) { + stream->type|=STREAMTYPE_MENU; + state->need_repaint=1; + } + osd_function=OSD_DVDMENU; + if(cmd->args[0].v.i==MP_CMD_DVDNAV_SELECT) { + osd_function=0; + state->need_repaint=1; + state->after_dvdmenu=1; + state->next_file=1; + return eof; + } + } + break; + case MP_CMD_VO_FULLSCREEN: + vo_data->fullscreen(); + break; + case MP_CMD_VO_SCREENSHOT: + vo_data->screenshot(dae_curr_vplayed(xp_core)); + break; + case MP_CMD_SUB_POS: { + int v; + v = cmd->args[0].v.i; - sub_data.pos+=v; - if(sub_data.pos >100) sub_data.pos=100; - if(sub_data.pos <0) sub_data.pos=0; - vo_osd_changed(OSDTYPE_SUBTITLE); - } break; - default : { - MSG_ERR("Received unknow cmd %s\n",cmd->name); + sub_data.pos+=v; + if(sub_data.pos >100) sub_data.pos=100; + if(sub_data.pos <0) sub_data.pos=0; + vo_osd_changed(OSDTYPE_SUBTITLE); + } break; + default : + MSG_ERR("Received unknow cmd %s\n",cmd->name); + } + mp_cmd_free(cmd); } - } - mp_cmd_free(cmd); - } - return eof; + return eof; } static void mpxp_config_malloc(int argc,char *argv[]) @@ -1697,22 +1693,22 @@ secure_keys=ptr_protector.protect(new MPXPSecureKeys(10)); mpxp_init_structs(); - MPXPSystem* MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; vo_data=new(zeromem) Video_Output; init_signal_handling(); xmp_init(); xmp_register_main(exit_sighandler); - mpxp_init_keyboard_fifo(); + MPXPSys.init_keyboard_fifo(); mpxp_print_init(mp_conf.verbose+MSGL_STATUS); MSG_INFO("%s",banner_text); /* Test for cpu capabilities (and corresponding OS support) for optimizing */ - MPXPSys->playtree = play_tree_new(); + MPXPSys.playtree = play_tree_new(); - MPXPCtx->mconfig = m_config_new(MPXPSys->playtree,MPXPSys->libinput()); + MPXPCtx->mconfig = m_config_new(MPXPSys.playtree,MPXPSys.libinput()); m_config_register_options(MPXPCtx->mconfig,mplayer_opts); // TODO : add something to let modules register their options mp_register_options(MPXPCtx->mconfig); @@ -1740,12 +1736,12 @@ MSG_ERR("MPlayerXP requires working copy of libswscaler\n"); exit_player(MSGTR_Exit_quit); } - if(mp_conf.shuffle_playback) MPXPSys->playtree->flags|=PLAY_TREE_RND; - else MPXPSys->playtree->flags&=~PLAY_TREE_RND; + if(mp_conf.shuffle_playback) MPXPSys.playtree->flags|=PLAY_TREE_RND; + else MPXPSys.playtree->flags&=~PLAY_TREE_RND; - MPXPSys->playtree = play_tree_cleanup(MPXPSys->playtree); - if(MPXPSys->playtree) { - playtree_iter = play_tree_iter_new(MPXPSys->playtree,MPXPCtx->mconfig); + MPXPSys.playtree = play_tree_cleanup(MPXPSys.playtree); + if(MPXPSys.playtree) { + playtree_iter = play_tree_iter_new(MPXPSys.playtree,MPXPCtx->mconfig); if(playtree_iter) { if(play_tree_iter_step(playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) { play_tree_iter_free(playtree_iter); @@ -1781,24 +1777,24 @@ // ******************* Now, let's see the per-file stuff ******************** play_next_file: - ao_subdevice=mpxp_init_output_subsystems(); + ao_subdevice=MPXPSys.init_output_subsystems(); if(filename) MSG_OK(MSGTR_Playing, filename); - forced_subs_only=mpxp_init_vobsub(filename); + forced_subs_only=MPXPSys.init_vobsub(filename); MP_UNIT("mplayer"); - if(!input_state.after_dvdmenu && MPXPSys->demuxer()) { - free_stream(MPXPSys->demuxer()->stream); - MPXPSys->demuxer()->stream=NULL; - MPXPSys->inited_flags&=~INITED_STREAM; - MPXPSys->uninit_demuxer(); + if(!input_state.after_dvdmenu && MPXPSys.demuxer()) { + free_stream(MPXPSys.demuxer()->stream); + MPXPSys.demuxer()->stream=NULL; + MPXPSys.inited_flags&=~INITED_STREAM; + MPXPSys.uninit_demuxer(); } - if(MPXPSys->demuxer()) { - MPXPSys->demuxer()->audio=NULL; - MPXPSys->demuxer()->video=NULL; - MPXPSys->demuxer()->sub=NULL; - MPXPSys->demuxer()->audio->sh=NULL; - MPXPSys->demuxer()->video->sh=NULL; + if(MPXPSys.demuxer()) { + MPXPSys.demuxer()->audio=NULL; + MPXPSys.demuxer()->video=NULL; + MPXPSys.demuxer()->sub=NULL; + MPXPSys.demuxer()->audio->sh=NULL; + MPXPSys.demuxer()->video->sh=NULL; } //============ Open & Sync STREAM --- fork cache2 ==================== stream_dump_type=0; @@ -1810,16 +1806,16 @@ if(stream_dump_type) mp_conf.s_cache_size=0; MP_UNIT("open_stream"); - if(!input_state.after_dvdmenu) stream=open_stream(MPXPSys->libinput(),filename,&file_format,stream_dump_type>1?dump_stream_event_handler:mpxp_stream_event_handler); + if(!input_state.after_dvdmenu) stream=open_stream(MPXPSys.libinput(),filename,&file_format,stream_dump_type>1?dump_stream_event_handler:mpxp_stream_event_handler); if(!stream) { // error... MSG_ERR("Can't open: %s\n",filename); - eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY); + eof = MPXPSys.libmpdemux_was_interrupted(PT_NEXT_ENTRY); goto goto_next_file; } - MPXPSys->inited_flags|=INITED_STREAM; + MPXPSys.inited_flags|=INITED_STREAM; if(stream->type & STREAMTYPE_TEXT) { - eof=mpxp_handle_playlist(filename); + eof=MPXPSys.handle_playlist(filename); goto goto_next_file; } @@ -1828,14 +1824,14 @@ // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts) if(mp_conf.s_cache_size && !stream_dump_type){ MP_UNIT("enable_cache"); - if(!stream_enable_cache(stream,MPXPSys->libinput(),mp_conf.s_cache_size*1024,mp_conf.s_cache_size*1024/5,mp_conf.s_cache_size*1024/20)) - if((eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file; + if(!stream_enable_cache(stream,MPXPSys.libinput(),mp_conf.s_cache_size*1024,mp_conf.s_cache_size*1024/5,mp_conf.s_cache_size*1024/20)) + if((eof = MPXPSys.libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file; } // DUMP STREAMS: if(stream_dump_type==1) dump_stream(stream); -//============ Open MPXPSys->demuxer()S --- DETECT file type ======================= +//============ Open MPXPSys.demuxer()S --- DETECT file type ======================= if(mp_conf.playbackspeed_factor!=1.0) mp_conf.has_audio=0; xp_core->initial_apts=HUGE; if(!mp_conf.has_audio) mp_conf.audio_id=-2; // do NOT read audio packets... @@ -1844,31 +1840,31 @@ MP_UNIT("demux_open"); - if(!input_state.after_dvdmenu) MPXPSys->assign_demuxer(demux_open(stream,mp_conf.audio_id,mp_conf.video_id,mp_conf.dvdsub_id)); - if(!MPXPSys->demuxer()) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR + if(!input_state.after_dvdmenu) MPXPSys.assign_demuxer(demux_open(stream,mp_conf.audio_id,mp_conf.video_id,mp_conf.dvdsub_id)); + if(!MPXPSys.demuxer()) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR input_state.after_dvdmenu=0; demux_stream_t *d_video; demux_stream_t *d_audio; demux_stream_t *d_dvdsub; - d_audio=MPXPSys->demuxer()->audio; - d_video=MPXPSys->demuxer()->video; - d_dvdsub=MPXPSys->demuxer()->sub; + d_audio=MPXPSys.demuxer()->audio; + d_video=MPXPSys.demuxer()->video; + d_dvdsub=MPXPSys.demuxer()->sub; /* Add NLS support here */ - mpxp_init_dvd_nls(); + MPXPSys.init_dvd_nls(); if(mp_conf.seek_to_byte) stream_skip(stream,mp_conf.seek_to_byte); sh_audio_t* sh_audio; sh_video_t* sh_video; - sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); - sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); + sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys.demuxer()->audio->sh); + sh_video=reinterpret_cast<sh_video_t*>(MPXPSys.demuxer()->video->sh); - mpxp_print_stream_formats(); + MPXPSys.print_stream_formats(); - if(sh_video) mpxp_read_video_properties(); + if(sh_video) MPXPSys.read_video_properties(); fflush(stdout); @@ -1878,16 +1874,16 @@ } //================== Read SUBTITLES (DVD & TEXT) ========================== - if(sh_video) mpxp_read_subtitles(filename,forced_subs_only,stream_dump_type); + if(sh_video) MPXPSys.read_subtitles(filename,forced_subs_only,stream_dump_type); //================== Init AUDIO (codec) ========================== MP_UNIT("init_audio_codec"); - if(sh_audio) mpxp_find_acodec(ao_subdevice); - sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys->demuxer()->audio->sh); + if(sh_audio) MPXPSys.find_acodec(ao_subdevice); + sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys.demuxer()->audio->sh); if(stream_dump_type>1) { - dump_mux_init(MPXPSys->demuxer(),MPXPSys->libinput()); + dump_mux_init(MPXPSys.demuxer(),MPXPSys.libinput()); goto dump_file; } @@ -1908,11 +1904,11 @@ } } - if(sh_audio) MPXPSys->inited_flags|=INITED_ACODEC; + if(sh_audio) MPXPSys.inited_flags|=INITED_ACODEC; if(stream_dump_type>1) { dump_file: - dump_mux(MPXPSys->demuxer(),mp_conf.av_sync_pts,mp_conf.seek_to_sec,mp_conf.play_n_frames); + dump_mux(MPXPSys.demuxer(),mp_conf.av_sync_pts,mp_conf.seek_to_sec,mp_conf.play_n_frames); goto goto_next_file; } /*================== Init VIDEO (codec & libvo) ==========================*/ @@ -1920,11 +1916,11 @@ MP_UNIT("init_video_filters"); if(sh_video->vfilter_inited<=0) { - sh_video->vfilter=vf_init(sh_video,MPXPSys->libinput()); + sh_video->vfilter=vf_init(sh_video,MPXPSys.libinput()); sh_video->vfilter_inited=1; } - if((mpxp_find_vcodec())!=MPXP_Ok) { - sh_video=reinterpret_cast<sh_video_t*>(MPXPSys->demuxer()->video->sh); + if((MPXPSys.find_vcodec())!=MPXP_Ok) { + sh_video=reinterpret_cast<sh_video_t*>(MPXPSys.demuxer()->video->sh); if(!sh_audio) goto goto_next_file; goto main; } @@ -1946,7 +1942,7 @@ vf_showlist(reinterpret_cast<vf_instance_t*>(sh_video->vfilter)); // ========== Init display (sh_video->src_w*sh_video->src_h/out_fmt) ============ - MPXPSys->inited_flags|=INITED_VO; + MPXPSys.inited_flags|=INITED_VO; MSG_V("INFO: Video OUT driver init OK!\n"); MP_UNIT("init_libvo"); fflush(stdout); @@ -1958,7 +1954,7 @@ //================ SETUP AUDIO ========================== - if(sh_audio) if((mpxp_configure_audio())!=0) goto goto_next_file; + if(sh_audio) if((MPXPSys.configure_audio())!=0) goto goto_next_file; MP_UNIT("av_init"); @@ -1983,7 +1979,7 @@ if(mp_conf.verbose) MSG_V("Freeing %d unused audio chunks\n",d_audio->packs); ds_free_packs(d_audio); // mp_free buffered chunks d_audio->id=-2; // do not read audio chunks - if(MPXPSys->ao_inited==MPXP_Ok) MPXPSys->uninit_player(INITED_AO); // close device + if(MPXPSys.ao_inited==MPXP_Ok) MPXPSys.uninit_player(INITED_AO); // close device } if(!sh_video){ @@ -1991,7 +1987,7 @@ if(mp_conf.verbose) MSG_V("Freeing %d unused video chunks\n",d_video->packs); ds_free_packs(d_video); d_video->id=-2; - if(MPXPSys->vo_inited) MPXPSys->uninit_player(INITED_VO); + if(MPXPSys.vo_inited) MPXPSys.uninit_player(INITED_VO); } if(!sh_audio && !sh_video) exit_player("Nothing to do"); @@ -2013,11 +2009,11 @@ if(mp_conf.benchmark) init_benchmark(); /* display clip info */ - demux_info_print(MPXPSys->demuxer(),filename); + demux_info_print(MPXPSys.demuxer(),filename); // TODO: rewrite test backtrace in .asm // mpxp_test_backtrace(); - mpxp_run_ahead_engine(); + MPXPSys.run_ahead_engine(); fflush(stdout); fflush(stderr); @@ -2056,18 +2052,18 @@ if(sh_video) eof|=dae_played_eof(xp_core->video); if(!sh_video) { if(mp_conf.benchmark && mp_conf.verbose) show_benchmark_status(); - else mpxp_print_audio_status(); + else MPXPSys.print_audio_status(); } usleep(250000); if(sh_video) vo_data->check_events(); #ifdef USE_OSD - while((mpxp_paint_osd(&osd.visible,&in_pause))!=0); + while((MPXPSys.paint_osd(&osd.visible,&in_pause))!=0); #endif //================= Keyboard events, SEEKing ==================== memset(&input_state,0,sizeof(input_state_t)); - eof=mpxp_handle_input(&seek_args,&osd,&input_state); + eof=MPXPSys.handle_input(&seek_args,&osd,&input_state); if(input_state.next_file) goto goto_next_file; if (mp_conf.seek_to_sec) { @@ -2105,7 +2101,7 @@ seek_args.secs -= (xp_core->bad_pts?shvad.v_pts:d_video->pts)-shvap.v_pts; } - mpxp_seek(&osd,&seek_args); + MPXPSys.seek(&osd,&seek_args); xp_core->audio->eof=0; seek_args.secs=0; @@ -2126,59 +2122,58 @@ if(mp_conf.benchmark) show_benchmark(); -if(playtree_iter != NULL && !input_state.after_dvdmenu) { -if(eof == PT_NEXT_ENTRY || eof == PT_PREV_ENTRY) { - eof = eof == PT_NEXT_ENTRY ? 1 : -1; - if(play_tree_iter_step(playtree_iter,eof,0) == PLAY_TREE_ITER_ENTRY) { - MPXPSys->uninit_player(INITED_ALL-(INITED_LIRC+INITED_INPUT+INITED_VO)); - eof = 1; - } else { - play_tree_iter_free(playtree_iter); - playtree_iter = NULL; - } -} else if (eof == PT_UP_NEXT || eof == PT_UP_PREV) { - eof = eof == PT_UP_NEXT ? 1 : -1; - if(play_tree_iter_up_step(playtree_iter,eof,0) == PLAY_TREE_ITER_ENTRY) { - MPXPSys->uninit_player(INITED_ALL-(INITED_LIRC+INITED_INPUT+INITED_VO)); - eof = 1; - } else { - play_tree_iter_free(playtree_iter); - playtree_iter = NULL; - } -}else { // NEXT PREV SRC - MPXPSys->uninit_player(INITED_ALL-(INITED_LIRC+INITED_INPUT+INITED_VO+INITED_DEMUXER)); - eof = eof == PT_PREV_SRC ? -1 : 1; -} -} - MPXPSys->uninit_player(INITED_VO); + if(playtree_iter != NULL && !input_state.after_dvdmenu) { + if(eof == PT_NEXT_ENTRY || eof == PT_PREV_ENTRY) { + eof = eof == PT_NEXT_ENTRY ? 1 : -1; + if(play_tree_iter_step(playtree_iter,eof,0) == PLAY_TREE_ITER_ENTRY) { + MPXPSys.uninit_player(INITED_ALL-(INITED_LIRC+INITED_INPUT+INITED_VO)); + eof = 1; + } else { + play_tree_iter_free(playtree_iter); + playtree_iter = NULL; + } + } else if (eof == PT_UP_NEXT || eof == PT_UP_PREV) { + eof = eof == PT_UP_NEXT ? 1 : -1; + if(play_tree_iter_up_step(playtree_iter,eof,0) == PLAY_TREE_ITER_ENTRY) { + MPXPSys.uninit_player(INITED_ALL-(INITED_LIRC+INITED_INPUT+INITED_VO)); + eof = 1; + } else { + play_tree_iter_free(playtree_iter); + playtree_iter = NULL; + } + } else { // NEXT PREV SRC + MPXPSys.uninit_player(INITED_ALL-(INITED_LIRC+INITED_INPUT+INITED_VO+INITED_DEMUXER)); + eof = eof == PT_PREV_SRC ? -1 : 1; + } + } + MPXPSys.uninit_player(INITED_VO); if(eof == 0) eof = 1; -if(!input_state.after_dvdmenu) -while(playtree_iter != NULL) { - filename = play_tree_iter_get_file(playtree_iter,eof); - if(filename == NULL) { - if( play_tree_iter_step(playtree_iter,eof,0) != PLAY_TREE_ITER_ENTRY) { - play_tree_iter_free(playtree_iter); - playtree_iter = NULL; - }; - } else - break; -} + if(!input_state.after_dvdmenu) + while(playtree_iter != NULL) { + filename = play_tree_iter_get_file(playtree_iter,eof); + if(filename == NULL) { + if( play_tree_iter_step(playtree_iter,eof,0) != PLAY_TREE_ITER_ENTRY) { + play_tree_iter_free(playtree_iter); + playtree_iter = NULL; + } + } else break; + } if( playtree_iter != NULL ){ int flg; flg=INITED_ALL; if(input_state.after_dvdmenu) flg &=~(INITED_STREAM|INITED_DEMUXER); - MPXPSys->uninit_player(flg&(~INITED_INPUT)); /* TODO: |(~INITED_AO)|(~INITED_VO) */ - MPXPSys->vo_inited=0; - MPXPSys->ao_inited=MPXP_False; + MPXPSys.uninit_player(flg&(~INITED_INPUT)); /* TODO: |(~INITED_AO)|(~INITED_VO) */ + MPXPSys.vo_inited=0; + MPXPSys.ao_inited=MPXP_False; eof = 0; xp_core->audio->eof=0; goto play_next_file; } - if(stream_dump_type>1) dump_mux_close(MPXPSys->demuxer()); + if(stream_dump_type>1) dump_mux_close(MPXPSys.demuxer()); exit_player(MSGTR_Exit_eof); mpxp_uninit_structs(); Modified: mplayerxp/mplayerxp.h =================================================================== --- mplayerxp/mplayerxp.h 2012-11-30 11:24:40 UTC (rev 491) +++ mplayerxp/mplayerxp.h 2012-11-30 13:31:41 UTC (rev 492) @@ -133,7 +133,7 @@ /* non-configurable through command line stuff */ struct MPXPContext :public Opaque { MPXPContext(); - virtual ~MPXPContext() {} + virtual ~MPXPContext(); int rtc_fd; int seek_time; @@ -144,7 +144,7 @@ subtitle* subtitles; m_config_t* mconfig; time_usage_t* bench; - struct MPXPSystem* MPXPSys; + MPXPSystem& MPXPSys; any_t* msg_priv; audio_processing_t& audio; video_processing_t& video; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-11-30 16:29:00
|
Revision: 494 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=494&view=rev Author: nickols_k Date: 2012-11-30 16:28:49 +0000 (Fri, 30 Nov 2012) Log Message: ----------- add private for class Demuxer_Stream Modified Paths: -------------- mplayerxp/libmpcodecs/ad_lavc.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demuxer_stream.cpp mplayerxp/libmpdemux/demuxer_stream.h mplayerxp/libmpdemux/video.cpp mplayerxp/mplayerxp.cpp Modified: mplayerxp/libmpcodecs/ad_lavc.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_lavc.cpp 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/libmpcodecs/ad_lavc.cpp 2012-11-30 16:28:49 UTC (rev 494) @@ -15,7 +15,7 @@ #include "osdep/bswap.h" #include "libmpconf/codec-cfg.h" -#include "mp_conf_lavc.h"" +#include "mp_conf_lavc.h" #include "codecs_ld.h" typedef struct priv_s { @@ -213,7 +213,7 @@ if(y<0){ MSG_V("lavc_audio: error\n");break; } if(y<x) { - sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!) + sh_audio->ds->buffer_roll_back(x-y); // put back data (HACK!) if(sh_audio->wtag==mmioFOURCC('d','n','e','t')) swab(start+y,start+y,(x-y)&~(1)); } Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-11-30 16:28:49 UTC (rev 494) @@ -981,7 +981,7 @@ } ds=demux_avi_select_stream(demux,id); if(ds) - if(ds->packs+1>=MAX_PACKS || ds->bytes+len>=MAX_PACK_BYTES){ + if(ds->packs()+1>=MAX_PACKS || ds->bytes()+len>=MAX_PACK_BYTES){ /* this packet will cause a buffer overflow, switch to -ni mode!!! */ MSG_WARN("\nBadly interleaved .AVI detected - switching to -ni mode...\n"); if(priv->idx_size>0){ Modified: mplayerxp/libmpdemux/demux_viv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_viv.cpp 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/libmpdemux/demux_viv.cpp 2012-11-30 16:28:49 UTC (rev 494) @@ -482,10 +482,10 @@ #define skip_bits1(xxx) x_get_bits(1) /* most is hardcoded. should extend to handle all h263 streams */ -static int h263_decode_picture_header(unsigned char *b_ptr) +static int h263_decode_picture_header(const unsigned char *b_ptr) { // int i; - + const unsigned char *buffer; buffer=b_ptr; bufptr=bitcnt=buf=0; @@ -582,7 +582,7 @@ audio_pos=0; - h263_decode_picture_header(demuxer->video->buffer); + h263_decode_picture_header(demuxer->video->buffer()); if (vivo_param.version != -1) priv->version = '0' + vivo_param.version; Modified: mplayerxp/libmpdemux/demuxer_stream.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_stream.cpp 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/libmpdemux/demuxer_stream.cpp 2012-11-30 16:28:49 UTC (rev 494) @@ -17,18 +17,18 @@ { rnd_fill(antiviral_hole,reinterpret_cast<long>(&pin)-reinterpret_cast<long>(&antiviral_hole)); pin=DS_PIN; - buffer_pos=buffer_size=0; - buffer=NULL; + _buffer_pos=_buffer_size=0; + _buffer=NULL; pts=0; - pts_bytes=0; + _pts_bytes=0; eof=0; pos=0; dpos=0; pack_no=0; //--------------- - packs=0; - bytes=0; - first=last=current=NULL; + _packs=0; + _bytes=0; + _first=_last=_current=NULL; id=_id; demuxer=_demuxer; //---------------- @@ -43,38 +43,38 @@ #if 1 int Demuxer_Stream::getch() { return - (buffer_pos<buffer_size) ? buffer[buffer_pos++]: - ((!fill_buffer())? (-1) : buffer[buffer_pos++]); + (_buffer_pos<_buffer_size) ? _buffer[_buffer_pos++]: + ((!fill_buffer())? (-1) : _buffer[_buffer_pos++]); } #else int Demuxer_Stream::getch(){ - if(buffer_pos>=buffer_size){ + if(_buffer_pos>=_buffer_size){ if(!fill_buffer()){ return -1; // EOF } } - return buffer[buffer_pos++]; + return _buffer[_buffer_pos++]; } #endif void Demuxer_Stream::add_packet(Demuxer_Packet* dp){ if(dp->length()>0) { - ++packs; - bytes+=dp->length(); - if(last) { + ++_packs; + _bytes+=dp->length(); + if(_last) { // next packet in stream - last->next=dp; - last=dp; + _last->next=dp; + _last=dp; } else { - // first packet in stream - first=last=dp; + // _first packet in stream + _first=_last=dp; } - MSG_DBG2("DEMUX: Append packet: len=%d pts=%5.3f pos=%u [packs: A=%d V=%d]\n", - dp->length(),dp->pts,(unsigned int)dp->pos,demuxer->audio->packs,demuxer->video->packs); + MSG_DBG2("DEMUX: Append packet: len=%d pts=%5.3f pos=%u [_packs: A=%d V=%d]\n", + dp->length(),dp->pts,(unsigned int)dp->pos,demuxer->audio->_packs,demuxer->video->_packs); } else - MSG_DBG2("DEMUX: Skip packet: len=%d pts=%5.3f pos=%u [packs: A=%d V=%d]\n", - dp->length(),dp->pts,(unsigned int)dp->pos,demuxer->audio->packs,demuxer->video->packs); + MSG_DBG2("DEMUX: Skip packet: len=%d pts=%5.3f pos=%u [_packs: A=%d V=%d]\n", + dp->length(),dp->pts,(unsigned int)dp->pos,demuxer->audio->_packs,demuxer->video->_packs); } void Demuxer_Stream::read_packet(stream_t *stream,int len,float _pts,off_t _pos,dp_flags_e _flags){ @@ -93,7 +93,7 @@ // 0 = EOF // 1 = succesfull int Demuxer_Stream::fill_buffer() { - if (buffer) delete buffer; + if (_buffer) delete _buffer; /* free_packs(ds); */ if(mp_conf.verbose>2) { if(this==demuxer->audio) MSG_DBG3("ds_fill_buffer(d_audio) called\n"); @@ -102,37 +102,37 @@ else MSG_DBG3("ds_fill_buffer(unknown %p) called\n",this); } while(1){ - if(packs){ - Demuxer_Packet *p=first; + if(_packs){ + Demuxer_Packet *p=_first; // copy useful data: - buffer=p->buffer(); - buffer_pos=0; - buffer_size=p->length(); + _buffer=p->buffer(); + _buffer_pos=0; + _buffer_size=p->length(); pos=p->pos; dpos+=p->length(); // !!! ++pack_no; if(p->pts){ pts=p->pts; - pts_bytes=0; + _pts_bytes=0; } - pts_bytes+=p->length(); // !!! + _pts_bytes+=p->length(); // !!! flags=p->flags; // mp_free packet: - bytes-=p->length(); - current=p; - first=p->next; - if(!first) last=NULL; - --packs; + _bytes-=p->length(); + _current=p; + _first=p->next; + if(!_first) _last=NULL; + --_packs; check_pin("demuxer",pin,DS_PIN); - return 1; //ds->buffer_size; + return 1; //ds->_buffer_size; } - if(demuxer->audio->bytes>=MAX_PACK_BYTES){ - MSG_ERR(MSGTR_TooManyAudioInBuffer,demuxer->audio->packs,demuxer->audio->bytes); + if(demuxer->audio->_bytes>=MAX_PACK_BYTES){ + MSG_ERR(MSGTR_TooManyAudioInBuffer,demuxer->audio->_packs,demuxer->audio->_bytes); MSG_HINT(MSGTR_MaybeNI); break; } - if(demuxer->video->bytes>=MAX_PACK_BYTES){ - MSG_ERR(MSGTR_TooManyVideoInBuffer,demuxer->video->packs,demuxer->video->bytes); + if(demuxer->video->_bytes>=MAX_PACK_BYTES){ + MSG_ERR(MSGTR_TooManyVideoInBuffer,demuxer->video->_packs,demuxer->video->_bytes); MSG_HINT(MSGTR_MaybeNI); break; } @@ -145,9 +145,9 @@ break; // EOF } } - buffer_pos=buffer_size=0; - buffer=NULL; - current=NULL; + _buffer_pos=_buffer_size=0; + _buffer=NULL; + _current=NULL; MSG_V("ds_fill_buffer: EOF reached (stream: %s) \n",this==demuxer->audio?"audio":"video"); eof=1; check_pin("demuxer",pin,DS_PIN); @@ -156,23 +156,23 @@ int Demuxer_Stream::read_data(unsigned char* mem,int len) { int x; - int _bytes=0; + int __bytes=0; while(len>0){ - x=buffer_size-buffer_pos; + x=_buffer_size-_buffer_pos; if(x==0){ - if(!fill_buffer()) return _bytes; + if(!fill_buffer()) return __bytes; } else { if(x>len) x=len; - if(x<0) return _bytes; /* BAD!!! sometime happens. Broken stream, driver, gcc ??? */ - if(mem) memcpy(mem+_bytes,&buffer[buffer_pos],x); - _bytes+=x;len-=x;buffer_pos+=x; + if(x<0) return __bytes; /* BAD!!! sometime happens. Broken stream, driver, gcc ??? */ + if(mem) memcpy(mem+__bytes,&_buffer[_buffer_pos],x); + __bytes+=x;len-=x;_buffer_pos+=x; } } - return _bytes; + return __bytes; } void Demuxer_Stream::free_packs() { - Demuxer_Packet *dp=first; + Demuxer_Packet *dp=_first; while(dp) { Demuxer_Packet *dn=dp->next; delete dp; @@ -183,26 +183,26 @@ delete asf_packet; asf_packet=NULL; } - first=last=NULL; - packs=0; // !!!!! - bytes=0; - if(current) delete current; - current=NULL; - buffer=NULL; - buffer_pos=buffer_size; + _first=_last=NULL; + _packs=0; // !!!!! + _bytes=0; + if(_current) delete _current; + _current=NULL; + _buffer=NULL; + _buffer_pos=_buffer_size; pts=0; - pts_bytes=0; + _pts_bytes=0; } void Demuxer_Stream::free_packs_until_pts(float _pts) { - Demuxer_Packet *dp=first; - unsigned _packs,_bytes; - _packs=_bytes=0; + Demuxer_Packet *dp=_first; + unsigned __packs,__bytes; + __packs=__bytes=0; while(dp) { Demuxer_Packet *dn=dp->next; if(dp->pts >= _pts) break; - _packs++; - _bytes+=dp->length(); + __packs++; + __bytes+=dp->length(); delete dp; dp=dn; } @@ -212,36 +212,36 @@ delete asf_packet; asf_packet=NULL; } - first=last=NULL; - packs=0; // !!!!! - bytes=0; + _first=_last=NULL; + _packs=0; // !!!!! + _bytes=0; pts=0; } else { - first=dp; - packs-=_packs; - bytes-=_bytes; + _first=dp; + _packs-=__packs; + _bytes-=__bytes; pts=dp->pts; } - if(current) delete current; - current=NULL; - buffer=NULL; - buffer_pos=buffer_size; - pts_bytes=0; + if(_current) delete _current; + _current=NULL; + _buffer=NULL; + _buffer_pos=_buffer_size; + _pts_bytes=0; } int Demuxer_Stream::get_packet(unsigned char **start){ while(1){ int len; - if(buffer_pos>=buffer_size){ + if(_buffer_pos>=_buffer_size){ if(!fill_buffer()){ // EOF *start = NULL; return -1; } } - len=buffer_size-buffer_pos; - *start = &buffer[buffer_pos]; - buffer_pos+=len; + len=_buffer_size-_buffer_pos; + *start = &_buffer[_buffer_pos]; + _buffer_pos+=len; return len; } } @@ -249,33 +249,35 @@ int Demuxer_Stream::get_packet_sub(unsigned char **start){ while(1){ int len; - if(buffer_pos>=buffer_size){ + if(_buffer_pos>=_buffer_size){ *start = NULL; - if(!packs) return -1; // no sub + if(!_packs) return -1; // no sub if(!fill_buffer()) return -1; // EOF } - len=buffer_size-buffer_pos; - *start = &buffer[buffer_pos]; - buffer_pos+=len; + len=_buffer_size-_buffer_pos; + *start = &_buffer[_buffer_pos]; + _buffer_pos+=len; return len; } } float Demuxer_Stream::get_next_pts() { - while(!first) { - if(demuxer->audio->bytes>=MAX_PACK_BYTES){ - MSG_ERR(MSGTR_TooManyAudioInBuffer,demuxer->audio->packs,demuxer->audio->bytes); + while(!_first) { + if(demuxer->audio->_bytes>=MAX_PACK_BYTES){ + MSG_ERR(MSGTR_TooManyAudioInBuffer,demuxer->audio->_packs,demuxer->audio->_bytes); MSG_HINT(MSGTR_MaybeNI); return -1; } - if(demuxer->video->bytes>=MAX_PACK_BYTES){ - MSG_ERR(MSGTR_TooManyVideoInBuffer,demuxer->video->packs,demuxer->video->bytes); + if(demuxer->video->_bytes>=MAX_PACK_BYTES){ + MSG_ERR(MSGTR_TooManyVideoInBuffer,demuxer->video->_packs,demuxer->video->_bytes); MSG_HINT(MSGTR_MaybeNI); return -1; } if(!demux_fill_buffer(demuxer,this)) return -1; } - return first->pts; + return _first->pts; } -} // namespace mpxp \ No newline at end of file +void Demuxer_Stream::buffer_roll_back(int x) { _buffer_pos-=x; } + +} // namespace mpxp Modified: mplayerxp/libmpdemux/demuxer_stream.h =================================================================== --- mplayerxp/libmpdemux/demuxer_stream.h 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/libmpdemux/demuxer_stream.h 2012-11-30 16:28:49 UTC (rev 494) @@ -3,6 +3,8 @@ #include "mp_config.h" #include "osdep/mplib.h" using namespace mpxp; + +#include <stdint.h> #include "demuxer_packet.h" struct demuxer_t; @@ -23,29 +25,22 @@ float get_next_pts(); int getch(); int fill_buffer(); - off_t tell() const { return (dpos-buffer_size)+buffer_pos; } - int tell_pts() const { return (pts_bytes-buffer_size)+buffer_pos; } + off_t tell() const { return (dpos-_buffer_size)+_buffer_pos; } + int tell_pts() const { return (_pts_bytes-_buffer_size)+_buffer_pos; } + int packs() const { return _packs; } + int bytes() const { return _bytes; } + const uint8_t*buffer() const { return _buffer; } + void buffer_roll_back(int size); // deprecated (added for ad_lavc) int id; /**< stream ID (for multiple audio/video streams) */ char antiviral_hole[RND_CHAR2]; unsigned pin; /**< personal identification number */ - int buffer_pos; /**< current buffer position */ - int buffer_size; /**< current buffer size */ - unsigned char* buffer; /**< current buffer */ float pts; /**< current buffer's PTS */ - int pts_bytes; /**< number of bytes read after last pts stamp */ int eof; /**< end of demuxed stream? (true if all buffer empty) */ off_t pos; /**< position in the input stream (file) */ off_t dpos; /**< position in the demuxed stream */ - int pack_no; /**< serial number of packet */ int flags; /**< flags of current packet (keyframe etc) */ /*---------------*/ - int packs; /**< number of packets in buffer */ - int bytes; /**< total bytes of packets in buffer */ - Demuxer_Packet* first; /**< read to current buffer from here */ - Demuxer_Packet* last; /**< append new packets from input stream to here */ - Demuxer_Packet* current; /**< needed for refcounting of the buffer */ - demuxer_t* demuxer; /**< parent demuxer structure (stream handler) */ /* ---- asf ----- */ Demuxer_Packet* asf_packet; /**< read asf fragments here */ int asf_seq; /**< sequence id associated with asf_packet */ @@ -55,6 +50,18 @@ float prev_pts; /**< PTS of previous packet (DVD's PTS correction) */ float pts_corr; /**< PTS correction (DVD's PTS correction) */ int pts_flags; /**< PTS flags like trigger for correction applying (DVD's PTS correction) */ + demuxer_t* demuxer; /**< parent demuxer structure (stream handler) */ + int pack_no; /**< serial number of packet */ + private: + int _pts_bytes; /**< number of bytes read after last pts stamp */ + int _packs; /**< number of packets in buffer */ + int _bytes; /**< total bytes of packets in buffer */ + Demuxer_Packet* _first; /**< read to current buffer from here */ + Demuxer_Packet* _last; /**< append new packets from input stream to here */ + Demuxer_Packet* _current; /**< needed for refcounting of the buffer */ + int _buffer_pos; /**< current buffer position */ + int _buffer_size; /**< current buffer size */ + uint8_t* _buffer; /**< current buffer */ }; } // namespace mpxp -#endif \ No newline at end of file +#endif Modified: mplayerxp/libmpdemux/video.cpp =================================================================== --- mplayerxp/libmpdemux/video.cpp 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/libmpdemux/video.cpp 2012-11-30 16:28:49 UTC (rev 494) @@ -119,13 +119,13 @@ /* demuxer pos saving is required for libavcodec mpeg decoder as it's reading the mpeg header self! */ - saved_pos = d_video->buffer_pos; +// saved_pos = d_video->buffer_pos; saved_type = d_video->demuxer->file_format; d_video->demuxer->file_format = DEMUXER_TYPE_MPEG_ES; video_read_properties(sh_video); d_video->demuxer->file_format = saved_type; - d_video->buffer_pos = saved_pos; +// d_video->buffer_pos = saved_pos; // goto mpeg_header_parser; } #endif Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-11-30 15:24:08 UTC (rev 493) +++ mplayerxp/mplayerxp.cpp 2012-11-30 16:28:49 UTC (rev 494) @@ -1976,7 +1976,6 @@ sh_audio->a_pts=HUGE; } else { MSG_INFO(MSGTR_NoSound); - if(mp_conf.verbose) MSG_V("Freeing %d unused audio chunks\n",d_audio->packs); d_audio->free_packs(); // mp_free buffered chunks d_audio->id=-2; // do not read audio chunks if(MPXPSys.ao_inited==MPXP_Ok) MPXPSys.uninit_player(INITED_AO); // close device @@ -1984,7 +1983,6 @@ if(!sh_video){ MSG_INFO("Video: no video!!!\n"); - if(mp_conf.verbose) MSG_V("Freeing %d unused video chunks\n",d_video->packs); d_video->free_packs(); d_video->id=-2; if(MPXPSys.vo_inited) MPXPSys.uninit_player(INITED_VO); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-01 15:51:37
|
Revision: 495 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=495&view=rev Author: nickols_k Date: 2012-12-01 15:51:26 +0000 (Sat, 01 Dec 2012) Log Message: ----------- initial level of MPXPContext protection Modified Paths: -------------- mplayerxp/libmpcodecs/ad_a52.cpp mplayerxp/libmpcodecs/ad_dca.cpp mplayerxp/libmpcodecs/ad_faad.cpp mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpcodecs/vd_dshow.cpp mplayerxp/libmpcodecs/vd_libmpeg2.cpp mplayerxp/libmpcodecs/vd_vfw.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer_r.cpp mplayerxp/libmpstream/cache2.cpp mplayerxp/libplaytree/asxparser.cpp mplayerxp/mp_msg.cpp mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/xmpcore/xmp_adecoder.cpp mplayerxp/xmpcore/xmp_aplayer.cpp mplayerxp/xmpcore/xmp_vdecoder.cpp mplayerxp/xmpcore/xmp_vplayer.cpp Modified: mplayerxp/libmpcodecs/ad_a52.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_a52.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/ad_a52.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -155,7 +155,7 @@ float pts; int flags=0; /* Dolby AC3 audio:*/ - mpxp_a52_accel = MPXPCtx->mplayer_accel; + mpxp_a52_accel = mpxp_context().mplayer_accel; mpxp_a52_state=a52_init (mpxp_a52_accel); if (mpxp_a52_state == NULL) { MSG_ERR("A52 init failed\n"); Modified: mplayerxp/libmpcodecs/ad_dca.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dca.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/ad_dca.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -156,7 +156,7 @@ float pts; int flags=0; /* Dolby AC3 audio:*/ - mpxp_dca_accel = MPXPCtx->mplayer_accel; + mpxp_dca_accel = mpxp_context().mplayer_accel; mpxp_dca_state = dca_init(mpxp_dca_accel); if (mpxp_dca_state == NULL) { MSG_ERR("dca init failed\n"); Modified: mplayerxp/libmpcodecs/ad_faad.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_faad.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/ad_faad.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -193,7 +193,7 @@ float pts; int NeAAC_init; NeAACDecConfigurationPtr NeAAC_conf; - if(!(NeAAC_hdec = NeAACDecOpen(MPXPCtx->mplayer_accel))) { + if(!(NeAAC_hdec = NeAACDecOpen(mpxp_context().mplayer_accel))) { MSG_WARN("FAAD: Failed to open the decoder!\n"); // XXX: deal with cleanup! return MPXP_False; } Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -305,11 +305,11 @@ t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->video+=tt; + mpxp_context().bench->video+=tt; if(mp_conf.benchmark || mp_conf.frame_dropping) { - if(tt > MPXPCtx->bench->max_video) MPXPCtx->bench->max_video=tt; - if(tt < MPXPCtx->bench->min_video) MPXPCtx->bench->min_video=tt; - MPXPCtx->bench->cur_video=tt; + if(tt > mpxp_context().bench->max_video) mpxp_context().bench->max_video=tt; + if(tt < mpxp_context().bench->min_video) mpxp_context().bench->min_video=tt; + mpxp_context().bench->cur_video=tt; } if(frame->flags) return 0; @@ -318,12 +318,12 @@ t2=GetTimer()-t2; tt=t2*0.000001f; - MPXPCtx->bench->vout+=tt; + mpxp_context().bench->vout+=tt; if(mp_conf.benchmark || mp_conf.frame_dropping) { - if(tt > MPXPCtx->bench->max_vout) MPXPCtx->bench->max_vout = tt; - if(tt < MPXPCtx->bench->min_vout) MPXPCtx->bench->min_vout = tt; - MPXPCtx->bench->cur_vout=tt; + if(tt > mpxp_context().bench->max_vout) mpxp_context().bench->max_vout = tt; + if(tt < mpxp_context().bench->min_vout) mpxp_context().bench->min_vout = tt; + mpxp_context().bench->cur_vout=tt; } return 1; @@ -345,12 +345,12 @@ Demuxer_Stream *d_dvdsub=sh_video->ds->demuxer->sub; #ifdef USE_SUB // find sub - if(MPXPCtx->subtitles && v_pts>0){ + if(mpxp_context().subtitles && v_pts>0){ float pts=v_pts; if(mp_conf.sub_fps==0) mp_conf.sub_fps=sh_video->fps; MP_UNIT("find_sub"); if (pts > sub_last_pts || pts < sub_last_pts-1.0 ) { - find_sub(MPXPCtx->subtitles,sub_uses_time?(100*pts):(pts*mp_conf.sub_fps),vo_data); // FIXME! frame counter... + find_sub(mpxp_context().subtitles,sub_uses_time?(100*pts):(pts*mp_conf.sub_fps),vo_data); // FIXME! frame counter... sub_last_pts = pts; } MP_UNIT(NULL); Modified: mplayerxp/libmpcodecs/vd_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dshow.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/vd_dshow.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -89,7 +89,7 @@ default: DS_VideoDecoder_SetDestFmt(reinterpret_cast<DS_VideoDecoder*>(sh->context),out_fmt&255,0); // RGB/BGR } - DS_SetAttr_DivX("Quality",MPXPCtx->output_quality); + DS_SetAttr_DivX("Quality",mpxp_context().output_quality); DS_VideoDecoder_StartInternal(reinterpret_cast<DS_VideoDecoder*>(sh->context)); MSG_V("INFO: Win32/DShow init OK!\n"); return MPXP_Ok; Modified: mplayerxp/libmpcodecs/vd_libmpeg2.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -261,7 +261,7 @@ priv_t *priv; if(!load_lib("libmpeg2"SLIBSUFFIX)) return MPXP_False; sh->context=priv=new(zeromem) priv_t; - if(!(priv->mpeg2dec=mpeg2_init(MPXPCtx->mplayer_accel))) return MPXP_False; + if(!(priv->mpeg2dec=mpeg2_init(mpxp_context().mplayer_accel))) return MPXP_False; return mpcodecs_config_vf(opaque,sh->src_w,sh->src_h); } Modified: mplayerxp/libmpcodecs/vd_vfw.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_vfw.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpcodecs/vd_vfw.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -173,7 +173,7 @@ // avi_header.our_in_buffer=mp_malloc(avi_header.video.dwSuggestedBufferSize); // FIXME!!!! - ICSendMessage(priv->hic, ICM_USER+80, (long)(&MPXPCtx->output_quality), 0); + ICSendMessage(priv->hic, ICM_USER+80, (long)(&mpxp_context().output_quality), 0); // don't do this palette mess always, it makes div3 dll crashing... if(sh_video->codec->outfmt[sh_video->outfmtidx]==IMGFMT_BGR8){ Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -362,7 +362,7 @@ if(!ad) MSG_WARN("Failed to open audio demuxer: %s\n",demux_conf.audio_stream); else if(ad->audio->sh && ((sh_audio_t*)ad->audio->sh)->wtag == 0x55) // MP3 - m_config_set_flag(MPXPCtx->mconfig,"mp3.hr-seek",1); // Enable high res seeking + m_config_set_flag(mpxp_context().mconfig,"mp3.hr-seek",1); // Enable high res seeking } if(ss) { sd = demux_open_stream(ss,-2,-2,dvdsub_id); Modified: mplayerxp/libmpdemux/demuxer_r.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_r.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -88,10 +88,10 @@ { t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->demux+=tt; - MPXPCtx->bench->audio_decode_correction=tt; - if(tt > MPXPCtx->bench->max_demux) MPXPCtx->bench->max_demux=tt; - if(tt < MPXPCtx->bench->min_demux) MPXPCtx->bench->min_demux=tt; + mpxp_context().bench->demux+=tt; + mpxp_context().bench->audio_decode_correction=tt; + if(tt > mpxp_context().bench->max_demux) mpxp_context().bench->max_demux=tt; + if(tt < mpxp_context().bench->min_demux) mpxp_context().bench->min_demux=tt; } UNLOCK_DEMUXER(); return retval; @@ -116,9 +116,9 @@ { t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->demux+=tt; - if(tt > MPXPCtx->bench->max_demux) MPXPCtx->bench->max_demux=tt; - if(tt < MPXPCtx->bench->min_demux) MPXPCtx->bench->min_demux=tt; + mpxp_context().bench->demux+=tt; + if(tt > mpxp_context().bench->max_demux) mpxp_context().bench->max_demux=tt; + if(tt < mpxp_context().bench->min_demux) mpxp_context().bench->min_demux=tt; } UNLOCK_DEMUXER(); return frame; @@ -139,10 +139,10 @@ { t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->demux+=tt; - MPXPCtx->bench->audio_decode_correction=tt; - if(tt > MPXPCtx->bench->max_demux) MPXPCtx->bench->max_demux=tt; - if(tt < MPXPCtx->bench->min_demux) MPXPCtx->bench->min_demux=tt; + mpxp_context().bench->demux+=tt; + mpxp_context().bench->audio_decode_correction=tt; + if(tt > mpxp_context().bench->max_demux) mpxp_context().bench->max_demux=tt; + if(tt < mpxp_context().bench->min_demux) mpxp_context().bench->min_demux=tt; } UNLOCK_DEMUXER(); return retval; @@ -163,10 +163,10 @@ { t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->demux+=tt; - MPXPCtx->bench->audio_decode_correction=tt; - if(tt > MPXPCtx->bench->max_demux) MPXPCtx->bench->max_demux=tt; - if(tt < MPXPCtx->bench->min_demux) MPXPCtx->bench->min_demux=tt; + mpxp_context().bench->demux+=tt; + mpxp_context().bench->audio_decode_correction=tt; + if(tt > mpxp_context().bench->max_demux) mpxp_context().bench->max_demux=tt; + if(tt < mpxp_context().bench->min_demux) mpxp_context().bench->min_demux=tt; } UNLOCK_DEMUXER(); return retval; @@ -194,9 +194,9 @@ { t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->demux+=tt; - if(tt > MPXPCtx->bench->max_demux) MPXPCtx->bench->max_demux=tt; - if(tt < MPXPCtx->bench->min_demux) MPXPCtx->bench->min_demux=tt; + mpxp_context().bench->demux+=tt; + if(tt > mpxp_context().bench->max_demux) mpxp_context().bench->max_demux=tt; + if(tt < mpxp_context().bench->min_demux) mpxp_context().bench->min_demux=tt; } UNLOCK_DEMUXER(); return retval; Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -255,9 +255,9 @@ if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; tt = t*0.000001f; - MPXPCtx->bench->c2+=tt; - if(tt > MPXPCtx->bench->max_c2) MPXPCtx->bench->max_c2=tt; - if(tt < MPXPCtx->bench->min_c2) MPXPCtx->bench->min_c2=tt; + mpxp_context().bench->c2+=tt; + if(tt > mpxp_context().bench->max_c2) mpxp_context().bench->max_c2=tt; + if(tt < mpxp_context().bench->min_c2) mpxp_context().bench->min_c2=tt; } if(!cfill) usleep(FILL_USLEEP_TIME); // idle if(priv->state==Pth_Canceling) break; Modified: mplayerxp/libplaytree/asxparser.cpp =================================================================== --- mplayerxp/libplaytree/asxparser.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/libplaytree/asxparser.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -450,7 +450,7 @@ return; } val = asx_get_attrib("VALUE",attribs); - if(m_config_get_option(MPXPCtx->mconfig,name) == NULL) { + if(m_config_get_option(mpxp_context().mconfig,name) == NULL) { MSG_WARN("Found unknow param in asx: %s",name); if(val) MSG_WARN("=%s\n",val); Modified: mplayerxp/mp_msg.cpp =================================================================== --- mplayerxp/mp_msg.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/mp_msg.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -25,7 +25,7 @@ static char *_2ansi(unsigned char attr) { - priv_t*priv=reinterpret_cast<priv_t*>(MPXPCtx->msg_priv); + priv_t*priv=reinterpret_cast<priv_t*>(mpxp_context().msg_priv); int bg = _bg(attr); int bc = priv->_color[bg & 7]; @@ -44,7 +44,7 @@ unsigned i; int _color[8]={0,4,2,6,1,5,3,7}; priv_t*priv=new priv_t; - MPXPCtx->msg_priv=priv; + mpxp_context().msg_priv=priv; memcpy(priv->_color,_color,sizeof(_color)); pthread_mutex_init(&priv->mp_msg_mutex,NULL); for(i=0;i<sizeof(hl)/sizeof(char);i++) memcpy(priv->scol[i],_2ansi(hl[i]),sizeof(priv->scol[0])); @@ -52,7 +52,7 @@ void mpxp_print_uninit(void) { - priv_t*priv=reinterpret_cast<priv_t*>(MPXPCtx->msg_priv); + priv_t*priv=reinterpret_cast<priv_t*>(mpxp_context().msg_priv); if(isatty(fileno(stderr))) fprintf(stderr,priv->scol[8]); mpxp_print_flush(); pthread_mutex_destroy(&priv->mp_msg_mutex); @@ -92,7 +92,7 @@ unsigned mod=x&0x0FFFFFFF; static int was_eol=1; priv_t*priv=NULL; - if(MPXPCtx) priv=reinterpret_cast<priv_t*>(MPXPCtx->msg_priv); + priv=reinterpret_cast<priv_t*>(mpxp_context().msg_priv); if(level>mp_conf.verbose+MSGL_V-1) return 0; /* do not display */ if((mod&mp_conf.msg_filter)==0) return 0; /* do not display */ if(priv) { Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/mplayerxp.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -249,7 +249,7 @@ MPXPContext::~MPXPContext() { delete bench; } static volatile char antiviral_hole2[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; -MPXPContext* MPXPCtx=NULL; +static MPXPContext* MPXPCtx(new(zeromem) MPXPContext); xp_core_t* xp_core=NULL; static volatile char antiviral_hole3[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; volatile MPXPSecureKeys* secure_keys; @@ -260,6 +260,8 @@ ao_data_t* ao_data=NULL; Video_Output* vo_data=NULL; /**************************************************************************/ +MPXPContext& mpxp_context() { return *MPXPCtx; } + static int mpxp_init_antiviral_protection(int verbose) { int rc; @@ -300,7 +302,6 @@ } static void mpxp_init_structs(void) { - MPXPCtx=new(zeromem) MPXPContext; #if defined( ARCH_X86 ) || defined(ARCH_X86_64) memset(&x86,-1,sizeof(x86_features_t)); #endif @@ -310,10 +311,8 @@ #ifdef ENABLE_WIN32LOADER free_codec_cfg(); #endif - delete MPXPCtx; if(vo_data) delete vo_data; if(ao_data) delete ao_data; - MPXPCtx=NULL; xmp_uninit(); mp_uninit_malloc(mp_conf.verbose); } @@ -371,7 +370,7 @@ if(mask&INITED_VCODEC){ inited_flags&=~INITED_VCODEC; MP_UNIT("uninit_vcodec"); - mpcv_uninit(MPXPCtx->video.decoder); + mpcv_uninit(mpxp_context().video.decoder); sh_video=NULL; } @@ -385,7 +384,7 @@ if(mask&INITED_ACODEC){ inited_flags&=~INITED_ACODEC; MP_UNIT("uninit_acodec"); - mpca_uninit(MPXPCtx->audio.decoder); + mpca_uninit(mpxp_context().audio.decoder); sh_audio=NULL; } @@ -410,10 +409,10 @@ if(mask&INITED_SUBTITLE){ inited_flags&=~INITED_SUBTITLE; MP_UNIT("sub_free"); - sub_free( MPXPCtx->subtitles ); + sub_free( mpxp_context().subtitles ); mp_conf.sub_name=NULL; vo_data->sub=NULL; - MPXPCtx->subtitles=NULL; + mpxp_context().subtitles=NULL; } #endif MP_UNIT(NULL); @@ -423,12 +422,12 @@ fflush(stdout); fflush(stderr); - MPXPCtx->MPXPSys.uninit_player(INITED_ALL); + mpxp_context().MPXPSys.uninit_player(INITED_ALL); MP_UNIT("exit_player"); if(why) MSG_HINT(MSGTR_Exiting,why); - if(MPXPCtx->mconfig) m_config_free(MPXPCtx->mconfig); + if(mpxp_context().mconfig) m_config_free(mpxp_context().mconfig); mpxp_print_uninit(); mpxp_uninit_structs(); if(why) exit(0); @@ -561,12 +560,12 @@ gCpuCaps.hasAES, gCpuCaps.hasAVX, gCpuCaps.hasFMA); - if(gCpuCaps.hasMMX) MPXPCtx->mplayer_accel |= MM_ACCEL_X86_MMX; - if(gCpuCaps.hasMMX2) MPXPCtx->mplayer_accel |= MM_ACCEL_X86_MMXEXT; - if(gCpuCaps.hasSSE) MPXPCtx->mplayer_accel |= MM_ACCEL_X86_SSE; - if(gCpuCaps.has3DNow) MPXPCtx->mplayer_accel |= MM_ACCEL_X86_3DNOW; - if(gCpuCaps.has3DNowExt) MPXPCtx->mplayer_accel |= MM_ACCEL_X86_3DNOWEXT; - MSG_V("MPXPCtx->mplayer_accel=%i\n",MPXPCtx->mplayer_accel); + if(gCpuCaps.hasMMX) mpxp_context().mplayer_accel |= MM_ACCEL_X86_MMX; + if(gCpuCaps.hasMMX2) mpxp_context().mplayer_accel |= MM_ACCEL_X86_MMXEXT; + if(gCpuCaps.hasSSE) mpxp_context().mplayer_accel |= MM_ACCEL_X86_SSE; + if(gCpuCaps.has3DNow) mpxp_context().mplayer_accel |= MM_ACCEL_X86_3DNOW; + if(gCpuCaps.has3DNowExt) mpxp_context().mplayer_accel |= MM_ACCEL_X86_3DNOWEXT; + MSG_V("mpxp_context().mplayer_accel=%i\n",mpxp_context().mplayer_accel); } #endif @@ -639,8 +638,8 @@ } void show_long_help(void) { - MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; - m_config_show_options(MPXPCtx->mconfig); + MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + m_config_show_options(mpxp_context().mconfig); mp_input_print_binds(MPXPSys.libinput()); print_stream_drivers(); vo_data->print_help(); @@ -668,7 +667,7 @@ //================= Update OSD ==================== void update_osd( float v_pts ) { - MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=mpxp_context().MPXPSys; static char osd_text_buffer[64]; static int osd_last_pts=-303; //================= Update OSD ==================== @@ -715,10 +714,10 @@ xp_core->audio->eof=0; if(_seek->secs || _seek->flags&DEMUX_SEEK_SET) { seek_rval=demux_seek_r(_demuxer,_seek); - MPXPCtx->mpxp_after_seek=25; /* 1 sec delay */ + mpxp_context().mpxp_after_seek=25; /* 1 sec delay */ } if(seek_rval){ - MPXPCtx->seek_time = GetTimerMS(); + mpxp_context().seek_time = GetTimerMS(); // success: /* FIXME there should be real seeking for vobsub */ @@ -733,14 +732,14 @@ if(sh_video){ MP_UNIT("seek_video_reset"); - mpcv_resync_stream(MPXPCtx->video.decoder); + mpcv_resync_stream(mpxp_context().video.decoder); vo_data->reset(); sh_video->chapter_change=-1; } if(sh_audio){ MP_UNIT("seek_audio_reset"); - mpca_resync_stream(MPXPCtx->audio.decoder); + mpca_resync_stream(mpxp_context().audio.decoder); ao_reset(ao_data); // stop audio, throwing away buffered data } @@ -764,7 +763,7 @@ if(sh_video) { max_pts_correction=0.1; if(osd) osd->visible=sh_video->fps<=60?sh_video->fps:25; // to rewert to PLAY pointer after 1 sec - MPXPCtx->bench->audio=0; MPXPCtx->bench->audio_decode=0; MPXPCtx->bench->video=0; MPXPCtx->bench->vout=0; + mpxp_context().bench->audio=0; mpxp_context().bench->audio_decode=0; mpxp_context().bench->video=0; mpxp_context().bench->vout=0; if(vo_data->spudec) { unsigned char* packet=NULL; while(ds_get_packet_sub_r(d_dvdsub,&packet)>0) ; // Empty stream @@ -778,7 +777,7 @@ void mpxp_reset_vcache(void) { - MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=mpxp_context().MPXPSys; sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys.demuxer()->video->sh); seek_args_t _seek = { 0, DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS }; if(sh_video) MPXPSys.seek(NULL,&_seek); @@ -787,7 +786,7 @@ void mpxp_resync_audio_stream(void) { - mpca_resync_stream(MPXPCtx->audio.decoder); + mpca_resync_stream(mpxp_context().audio.decoder); } static void __FASTCALL__ mpxp_stream_event_handler(stream_t *s,const stream_packet_t *sp) @@ -797,39 +796,39 @@ static void init_benchmark(void) { - MPXPCtx->bench->max_audio=0; MPXPCtx->bench->max_video=0; MPXPCtx->bench->max_vout=0; - MPXPCtx->bench->min_audio=HUGE; MPXPCtx->bench->min_video=HUGE; MPXPCtx->bench->min_vout=HUGE; + mpxp_context().bench->max_audio=0; mpxp_context().bench->max_video=0; mpxp_context().bench->max_vout=0; + mpxp_context().bench->min_audio=HUGE; mpxp_context().bench->min_video=HUGE; mpxp_context().bench->min_vout=HUGE; - MPXPCtx->bench->min_audio_decode=HUGE; - MPXPCtx->bench->max_audio_decode=0; + mpxp_context().bench->min_audio_decode=HUGE; + mpxp_context().bench->max_audio_decode=0; - MPXPCtx->bench->max_demux=0; - MPXPCtx->bench->demux=0; - MPXPCtx->bench->min_demux=HUGE; + mpxp_context().bench->max_demux=0; + mpxp_context().bench->demux=0; + mpxp_context().bench->min_demux=HUGE; - MPXPCtx->bench->cur_video=0; - MPXPCtx->bench->cur_vout=0; - MPXPCtx->bench->cur_audio=0; + mpxp_context().bench->cur_video=0; + mpxp_context().bench->cur_vout=0; + mpxp_context().bench->cur_audio=0; } static void show_benchmark(void) { - double tot=(MPXPCtx->bench->video+MPXPCtx->bench->vout+MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode+MPXPCtx->bench->demux+MPXPCtx->bench->c2); + double tot=(mpxp_context().bench->video+mpxp_context().bench->vout+mpxp_context().bench->audio+mpxp_context().bench->audio_decode+mpxp_context().bench->demux+mpxp_context().bench->c2); double total_time_usage; - MPXPCtx->bench->total_start=GetTimer()-MPXPCtx->bench->total_start; - total_time_usage = (float)MPXPCtx->bench->total_start*0.000001; + mpxp_context().bench->total_start=GetTimer()-mpxp_context().bench->total_start; + total_time_usage = (float)mpxp_context().bench->total_start*0.000001; MSG_INFO("\nAVE BENCHMARKs: VC:%8.3fs VO:%8.3fs A:%8.3fs D:%8.3fs = %8.4fs C:%8.3fs\n", - MPXPCtx->bench->video,MPXPCtx->bench->vout,MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode, - MPXPCtx->bench->demux,MPXPCtx->bench->c2,tot); + mpxp_context().bench->video,mpxp_context().bench->vout,mpxp_context().bench->audio+mpxp_context().bench->audio_decode, + mpxp_context().bench->demux,mpxp_context().bench->c2,tot); if(total_time_usage>0.0) MSG_INFO("AVE BENCHMARK%%: VC:%8.4f%% VO:%8.4f%% A:%8.4f%% D:%8.4f%% C:%8.4f%% = %8.4f%%\n", - 100.0*MPXPCtx->bench->video/total_time_usage, - 100.0*MPXPCtx->bench->vout/total_time_usage, - 100.0*(MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode)/total_time_usage, - 100.0*MPXPCtx->bench->demux/total_time_usage, - 100.0*MPXPCtx->bench->c2/total_time_usage, + 100.0*mpxp_context().bench->video/total_time_usage, + 100.0*mpxp_context().bench->vout/total_time_usage, + 100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/total_time_usage, + 100.0*mpxp_context().bench->demux/total_time_usage, + 100.0*mpxp_context().bench->c2/total_time_usage, 100.0*tot/total_time_usage); unsigned nframes=xp_core->video->num_played_frames; MSG_INFO("\nREAL RESULTS: from %u was dropped=%u\n" @@ -838,17 +837,17 @@ static void show_benchmark_status(void) { - MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=mpxp_context().MPXPSys; sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys.demuxer()->audio->sh); if(xmp_test_model(XMP_Run_AudioPlayback)) MSG_STATUS("A:%6.1f %4.1f%%\r" ,sh_audio->timer-ao_get_delay(ao_data) - ,(sh_audio->timer>0.5)?100.0*(MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode)/(double)sh_audio->timer:0 + ,(sh_audio->timer>0.5)?100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)sh_audio->timer:0 ); else MSG_STATUS("A:%6.1f %4.1f%% B:%4.1f\r" ,sh_audio->timer-ao_get_delay(ao_data) - ,(sh_audio->timer>0.5)?100.0*(MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode)/(double)sh_audio->timer:0 + ,(sh_audio->timer>0.5)?100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)sh_audio->timer:0 ,get_delay_audio_buffer() ); } @@ -867,7 +866,7 @@ } void mplayer_put_key(int code){ - MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=mpxp_context().MPXPSys; mp_cmd_t* cmd; cmd=mp_input_get_cmd_from_keys(MPXPSys.libinput(),1,&code); mp_input_queue_cmd(MPXPSys.libinput(),cmd); @@ -1110,15 +1109,15 @@ // check .sub MP_UNIT("read_subtitles_file"); if(mp_conf.sub_name){ - MPXPCtx->subtitles=sub_read_file(mp_conf.sub_name, sh_video->fps); - if(!MPXPCtx->subtitles) MSG_ERR(MSGTR_CantLoadSub,mp_conf.sub_name); + mpxp_context().subtitles=sub_read_file(mp_conf.sub_name, sh_video->fps); + if(!mpxp_context().subtitles) MSG_ERR(MSGTR_CantLoadSub,mp_conf.sub_name); } else if(mp_conf.sub_auto) { // auto load sub file ... - MPXPCtx->subtitles=sub_read_file( filename ? sub_filename( get_path("sub/"), filename ) + mpxp_context().subtitles=sub_read_file( filename ? sub_filename( get_path("sub/"), filename ) : "default.sub", sh_video->fps ); } - if(MPXPCtx->subtitles) { + if(mpxp_context().subtitles) { inited_flags|=INITED_SUBTITLE; - if(stream_dump_type>1) list_sub_file(MPXPCtx->subtitles); + if(stream_dump_type>1) list_sub_file(mpxp_context().subtitles); } #endif } @@ -1130,7 +1129,7 @@ Demuxer_Stream *d_audio=_demuxer->audio; sh_audio->codec=NULL; mpca=mpca_init(sh_audio); // try auto-probe first - if(mpca) { MPXPCtx->audio.decoder=mpca; found=1; } + if(mpca) { mpxp_context().audio.decoder=mpca; found=1; } #ifdef ENABLE_WIN32LOADER if(!found) { // Go through the codec.conf and find the best codec... @@ -1198,7 +1197,7 @@ if(vo_conf.softzoom) vo_data->ZOOM_SET(); if(vo_conf.flip>0) vo_data->FLIP_SET(); if(vo_conf.vidmode) vo_data->VM_SET(); - if((MPXPCtx->video.decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,_libinput))) sh_video->inited=1; + if((mpxp_context().video.decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,_libinput))) sh_video->inited=1; #ifdef ENABLE_WIN32LOADER if(!sh_video->inited) { /* Go through the codec.conf and find the best codec...*/ @@ -1219,7 +1218,7 @@ } } /* Use lavc decoders as last hope */ - if(!sh_video->inited) MPXPCtx->video.decoder=mpcv_lavc_init(sh_video,_libinput); + if(!sh_video->inited) mpxp_context().video.decoder=mpcv_lavc_init(sh_video,_libinput); #endif if(!sh_video->inited) { @@ -1525,7 +1524,7 @@ else v_cont+=v; if(v_cont > 100) v_cont=100; if(v_cont < -100) v_cont = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1543,7 +1542,7 @@ else v_bright+=v; if(v_bright > 100) v_bright = 100; if(v_bright < -100) v_bright = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1561,7 +1560,7 @@ else v_hue+=v; if(v_hue > 100) v_hue = 100; if(v_hue < -100) v_hue = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_HUE,v_hue)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_HUE,v_hue)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1579,7 +1578,7 @@ else v_saturation+=v; if(v_saturation > 100) v_saturation = 100; if(v_saturation < -100) v_saturation = -100; - if(mpcv_set_colors(MPXPCtx->video.decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1693,7 +1692,7 @@ secure_keys=ptr_protector.protect(new MPXPSecureKeys(10)); mpxp_init_structs(); - MPXPSystem& MPXPSys=MPXPCtx->MPXPSys; + MPXPSystem& MPXPSys=mpxp_context().MPXPSys; vo_data=new(zeromem) Video_Output; init_signal_handling(); @@ -1708,13 +1707,13 @@ MPXPSys.playtree = play_tree_new(); - MPXPCtx->mconfig = m_config_new(MPXPSys.playtree,MPXPSys.libinput()); - m_config_register_options(MPXPCtx->mconfig,mplayer_opts); + mpxp_context().mconfig = m_config_new(MPXPSys.playtree,MPXPSys.libinput()); + m_config_register_options(mpxp_context().mconfig,mplayer_opts); // TODO : add something to let modules register their options - mp_register_options(MPXPCtx->mconfig); - parse_cfgfiles(MPXPCtx->mconfig); + mp_register_options(mpxp_context().mconfig); + parse_cfgfiles(mpxp_context().mconfig); - if(m_config_parse_command_line(MPXPCtx->mconfig, argc, argv, envp)!=MPXP_Ok) + if(m_config_parse_command_line(mpxp_context().mconfig, argc, argv, envp)!=MPXP_Ok) exit_player("Error parse command line"); // error parsing cmdline if(!mp_conf.xp) { @@ -1741,7 +1740,7 @@ MPXPSys.playtree = play_tree_cleanup(MPXPSys.playtree); if(MPXPSys.playtree) { - playtree_iter = play_tree_iter_new(MPXPSys.playtree,MPXPCtx->mconfig); + playtree_iter = play_tree_iter_new(MPXPSys.playtree,mpxp_context().mconfig); if(playtree_iter) { if(play_tree_iter_step(playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) { play_tree_iter_free(playtree_iter); @@ -1890,8 +1889,8 @@ /* is it non duplicate block fro find_acodec() ??? */ if(sh_audio){ MSG_V("Initializing audio codec...\n"); - if(!MPXPCtx->audio.decoder) { - if((MPXPCtx->audio.decoder=mpca_init(sh_audio))==NULL){ + if(!mpxp_context().audio.decoder) { + if((mpxp_context().audio.decoder=mpca_init(sh_audio))==NULL){ MSG_ERR(MSGTR_CouldntInitAudioCodec); d_audio->sh=NULL; sh_audio=reinterpret_cast<sh_audio_t*>(d_audio->sh); @@ -1931,12 +1930,12 @@ /* Auto quality option enabled*/ MPXP_Rc rc; unsigned quality; - rc=mpcv_get_quality_max(MPXPCtx->video.decoder,&quality); - if(rc==MPXP_Ok) MPXPCtx->output_quality=quality; - if(mp_conf.autoq>MPXPCtx->output_quality) mp_conf.autoq=MPXPCtx->output_quality; - else MPXPCtx->output_quality=mp_conf.autoq; - MSG_V("AutoQ: setting quality to %d\n",MPXPCtx->output_quality); - mpcv_set_quality(MPXPCtx->video.decoder,MPXPCtx->output_quality); + rc=mpcv_get_quality_max(mpxp_context().video.decoder,&quality); + if(rc==MPXP_Ok) mpxp_context().output_quality=quality; + if(mp_conf.autoq>mpxp_context().output_quality) mp_conf.autoq=mpxp_context().output_quality; + else mpxp_context().output_quality=mp_conf.autoq; + MSG_V("AutoQ: setting quality to %d\n",mpxp_context().output_quality); + mpcv_set_quality(mpxp_context().video.decoder,mpxp_context().output_quality); } vf_showlist(reinterpret_cast<vf_instance_t*>(sh_video->vfilter)); @@ -1965,9 +1964,9 @@ d_video->demuxer->file_format == DEMUXER_TYPE_H264_ES || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PS || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TS))) - MPXPCtx->use_pts_fix2=1; + mpxp_context().use_pts_fix2=1; else - MPXPCtx->use_pts_fix2=0; + mpxp_context().use_pts_fix2=0; if(sh_video) sh_video->chapter_change=0; @@ -1996,13 +1995,13 @@ } /* Init timers and benchmarking */ - MPXPCtx->rtc_fd=InitTimer(); - if(!mp_conf.nortc && MPXPCtx->rtc_fd>0) { close(MPXPCtx->rtc_fd); MPXPCtx->rtc_fd=-1; } - MSG_V("Using %s timing\n",MPXPCtx->rtc_fd>0?"rtc":mp_conf.softsleep?"software":"usleep()"); + mpxp_context().rtc_fd=InitTimer(); + if(!mp_conf.nortc && mpxp_context().rtc_fd>0) { close(mpxp_context().rtc_fd); mpxp_context().rtc_fd=-1; } + MSG_V("Using %s timing\n",mpxp_context().rtc_fd>0?"rtc":mp_conf.softsleep?"software":"usleep()"); - MPXPCtx->bench->total_start=GetTimer(); - MPXPCtx->bench->audio=0; MPXPCtx->bench->audio_decode=0; MPXPCtx->bench->video=0; - MPXPCtx->bench->audio_decode_correction=0; + mpxp_context().bench->total_start=GetTimer(); + mpxp_context().bench->audio=0; mpxp_context().bench->audio_decode=0; mpxp_context().bench->video=0; + mpxp_context().bench->audio_decode_correction=0; if(mp_conf.benchmark) init_benchmark(); @@ -2019,7 +2018,7 @@ let thread will decode ahead! We may print something in block window ;) */ - MPXPCtx->seek_time = GetTimerMS(); + mpxp_context().seek_time = GetTimerMS(); if(sh_video) dae_wait_decoder_outrun(xp_core->video); Modified: mplayerxp/mplayerxp.h =================================================================== --- mplayerxp/mplayerxp.h 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/mplayerxp.h 2012-12-01 15:51:26 UTC (rev 495) @@ -149,8 +149,9 @@ audio_processing_t& audio; video_processing_t& video; }; - extern MPXPContext* MPXPCtx; + MPXPContext& mpxp_context(); + unsigned get_number_cpu(void); void show_help(void); void show_long_help(void); Modified: mplayerxp/xmpcore/xmp_adecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_adecoder.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/xmpcore/xmp_adecoder.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -276,7 +276,7 @@ for( l = 0, l2 = len, ret = 0; l < len && l2 >= audio_buffer.sh_audio->audio_out_minsize; ) { float pts; - ret = mpca_decode(MPXPCtx->audio.decoder, &audio_buffer.buffer[audio_buffer.head], audio_buffer.min_len, l2,blen,&pts); + ret = mpca_decode(mpxp_context().audio.decoder, &audio_buffer.buffer[audio_buffer.head], audio_buffer.min_len, l2,blen,&pts); if( ret <= 0 ) break; @@ -313,12 +313,12 @@ pthread_cond_signal( &audio_buffer.wait_buffer_cond ); t=GetTimer()-t; - MPXPCtx->bench->audio_decode+=t*0.000001f; - MPXPCtx->bench->audio_decode-=MPXPCtx->bench->audio_decode_correction; + mpxp_context().bench->audio_decode+=t*0.000001f; + mpxp_context().bench->audio_decode-=mpxp_context().bench->audio_decode_correction; if(mp_conf.benchmark) { - if(t > MPXPCtx->bench->max_audio_decode) MPXPCtx->bench->max_audio_decode = t; - if(t < MPXPCtx->bench->min_audio_decode) MPXPCtx->bench->min_audio_decode = t; + if(t > mpxp_context().bench->max_audio_decode) mpxp_context().bench->max_audio_decode = t; + if(t < mpxp_context().bench->min_audio_decode) mpxp_context().bench->min_audio_decode = t; } pthread_mutex_unlock( &audio_buffer.head_mutex ); Modified: mplayerxp/xmpcore/xmp_aplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_aplayer.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -65,7 +65,7 @@ ret=read_audio_buffer(sh_audio,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,&pts); } else { - ret=mpca_decode(MPXPCtx->audio.decoder,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], + ret=mpca_decode(mpxp_context().audio.decoder,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,&pts); } if(ret>0) sh_audio->a_buffer_len+=ret; @@ -78,12 +78,12 @@ MP_UNIT("play_audio"); // Leave AUDIO decoder module t=GetTimer()-t; tt = t*0.000001f; - MPXPCtx->bench->audio+=tt; + mpxp_context().bench->audio+=tt; if(mp_conf.benchmark) { - if(tt > MPXPCtx->bench->max_audio) MPXPCtx->bench->max_audio = tt; - if(tt < MPXPCtx->bench->min_audio) MPXPCtx->bench->min_audio = tt; - MPXPCtx->bench->cur_audio=tt; + if(tt > mpxp_context().bench->max_audio) mpxp_context().bench->max_audio = tt; + if(tt < mpxp_context().bench->min_audio) mpxp_context().bench->min_audio = tt; + mpxp_context().bench->cur_audio=tt; } if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len; @@ -96,7 +96,7 @@ memcpy(sh_audio->a_buffer,&sh_audio->a_buffer[playsize],sh_audio->a_buffer_len); if(!mp_conf.av_sync_pts && xmp_test_model(XMP_Run_AudioPlayer)) pthread_mutex_lock(&audio_timer_mutex); - if(MPXPCtx->use_pts_fix2) { + if(mpxp_context().use_pts_fix2) { if(sh_audio->a_pts != HUGE) { sh_audio->a_pts_pos-=playsize; if(sh_audio->a_pts_pos > -ao_get_delay(ao_data)*sh_audio->af_bps) { Modified: mplayerxp/xmpcore/xmp_vdecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -44,7 +44,7 @@ float screen_pts=dae_played_frame(xp_core->video).v_pts-(mp_conf.av_sync_pts?0:xp_core->initial_apts); static float prev_delta=64; float delta,max_frame_delay;/* delay for decoding of top slow frame */ - max_frame_delay = MPXPCtx->bench->max_video+MPXPCtx->bench->max_vout; + max_frame_delay = mpxp_context().bench->max_video+mpxp_context().bench->max_vout; /* TODO: @@ -138,7 +138,7 @@ if(!xmp_test_model(XMP_Run_VA_Decoder) && xp_core->audio) priv->name = "video decoder"; drop_barrier=(float)(xp_core->num_v_buffs/2)*(1/sh_video->fps); - if(mp_conf.av_sync_pts == -1 && !MPXPCtx->use_pts_fix2) + if(mp_conf.av_sync_pts == -1 && !mpxp_context().use_pts_fix2) xp_core->bad_pts = d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_ES || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG4_ES || d_video->demuxer->file_format == DEMUXER_TYPE_H264_ES || @@ -190,7 +190,7 @@ int cur_time; cur_time = GetTimerMS(); /* Ugly solution: disable frame dropping right after seeking! */ - if(cur_time - MPXPCtx->seek_time > (xp_core->num_v_buffs/sh_video->fps)*100) xp_n_frame_to_drop=compute_frame_dropping(sh_video,frame->pts,drop_barrier); + if(cur_time - mpxp_context().seek_time > (xp_core->num_v_buffs/sh_video->fps)*100) xp_n_frame_to_drop=compute_frame_dropping(sh_video,frame->pts,drop_barrier); } /* if( mp_conf.frame_dropping ) */ if(!finite(frame->pts)) MSG_WARN("Bug of demuxer! Value of video pts=%f\n",frame->pts); if(frame->type!=VideoFrame) escape_player("VideoDecoder doesn't parse non video frames",mp_conf.max_trace); @@ -209,20 +209,20 @@ if(xp_n_frame_to_drop) drop_param=mp_conf.frame_dropping; else drop_param=0; /* decode: */ - if(MPXPCtx->output_quality) { + if(mpxp_context().output_quality) { unsigned total = xp_core->num_v_buffs/2; unsigned distance = dae_get_decoder_outrun(xp_core->video); int our_quality; - our_quality = MPXPCtx->output_quality*distance/total; - if(drop_param) mpcv_set_quality(MPXPCtx->video.decoder,0); + our_quality = mpxp_context().output_quality*distance/total; + if(drop_param) mpcv_set_quality(mpxp_context().video.decoder,0); else - if(mp_conf.autoq) mpcv_set_quality(MPXPCtx->video.decoder,our_quality>0?our_quality:0); + if(mp_conf.autoq) mpcv_set_quality(mpxp_context().video.decoder,our_quality>0?our_quality:0); } frame->flags=drop_param; - blit_frame=mpcv_decode(MPXPCtx->video.decoder,frame); + blit_frame=mpcv_decode(mpxp_context().video.decoder,frame); MSG_DBG2("DECODER: %i[%i] %f\n",dae_curr_vdecoded(xp_core),frame->len,frame->pts); - if(MPXPCtx->output_quality) { - if(drop_param) mpcv_set_quality(MPXPCtx->video.decoder,MPXPCtx->output_quality); + if(mpxp_context().output_quality) { + if(drop_param) mpcv_set_quality(mpxp_context().video.decoder,mpxp_context().output_quality); } if(!blit_frame && drop_param) priv->dae->num_dropped_frames++; if(blit_frame) { Modified: mplayerxp/xmpcore/xmp_vplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vplayer.cpp 2012-11-30 16:28:49 UTC (rev 494) +++ mplayerxp/xmpcore/xmp_vplayer.cpp 2012-12-01 15:51:26 UTC (rev 495) @@ -31,10 +31,10 @@ MSG_STATUS("A:%6.1f V:%6.1f A-V:%7.3f %3d/%3d %2d%% %2d%% %4.1f%% %d [frms: [%i]]\n", a_pts-delay,v_pts,AV_delay ,xp_core->video->num_played_frames,xp_core->video->num_decoded_frames - ,(v_pts>0.5)?(int)(100.0*MPXPCtx->bench->video/(double)v_pts):0 - ,(v_pts>0.5)?(int)(100.0*MPXPCtx->bench->vout/(double)v_pts):0 - ,(v_pts>0.5)?(100.0*(MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode)/(double)v_pts):0 - ,MPXPCtx->output_quality + ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->video/(double)v_pts):0 + ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->vout/(double)v_pts):0 + ,(v_pts>0.5)?(100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)v_pts):0 + ,mpxp_context().output_quality ,dae_curr_vplayed(xp_core) ); fflush(stdout); @@ -49,26 +49,26 @@ ,a_pts-v_pts ,0.0 ,xp_core->video->num_played_frames,xp_core->video->num_decoded_frames - ,(v_pts>0.5)?(int)(100.0*MPXPCtx->bench->video/(double)v_pts):0 - ,(v_pts>0.5)?(int)(100.0*MPXPCtx->bench->vout/(double)v_pts):0 - ,(v_pts>0.5)?(100.0*(MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode)/(double)v_pts):0 - ,MPXPCtx->output_quality + ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->video/(double)v_pts):0 + ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->vout/(double)v_pts):0 + ,(v_pts>0.5)?(100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)v_pts):0 + ,mpxp_context().output_quality ); } else MSG_STATUS("V:%6.1f %3d %2d%% %2d%% %4.1f%% %d\r" ,v_pts ,xp_core->video->num_played_frames - ,(v_pts>0.5)?(int)(100.0*MPXPCtx->bench->video/(double)v_pts):0 - ,(v_pts>0.5)?(int)(100.0*MPXPCtx->bench->vout/(double)v_pts):0 - ,(v_pts>0.5)?(100.0*(MPXPCtx->bench->audio+MPXPCtx->bench->audio_decode)/(double)v_pts):0 - ,MPXPCtx->output_quality + ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->video/(double)v_pts):0 + ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->vout/(double)v_pts):0 + ,(v_pts>0.5)?(100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)v_pts):0 + ,mpxp_context().output_quality ); fflush(stdout); } static void vplayer_check_chapter_change(sh_audio_t* sh_audio,sh_video_t* sh_video,xmp_frame_t* shva_prev,float v_pts) { - if(MPXPCtx->use_pts_fix2 && sh_audio) { + if(mpxp_context().use_pts_fix2 && sh_audio) { if(sh_video->chapter_change == -1) { /* First frame after seek */ while(v_pts < 1.0 && sh_audio->timer==0.0 && ao_get_delay(ao_data)==0.0) yield_timeslice(); /* Wait for audio to start play */ @@ -98,10 +98,10 @@ often ao_get_delay() never returns 0 :( */ if(xp_core->audio->eof && !get_delay_audio_buffer()) goto nosound_model; if((!xp_core->audio->eof || ao_get_delay(ao_data)) && - (!MPXPCtx->use_pts_fix2 || (!sh_audio->chapter_change && !sh_video->chapter_change))) + (!mpxp_context().use_pts_fix2 || (!sh_audio->chapter_change && !sh_video->chapter_change))) sleep_time=screen_pts-((sh_audio->timer-ao_get_delay(ao_data)) +(mp_conf.av_sync_pts?0:xp_core->initial_apts)); - else if(MPXPCtx->use_pts_fix2 && sh_audio->chapter_change) + else if(mpxp_context().use_pts_fix2 && sh_audio->chapter_change) sleep_time=0; else goto nosound_model; @@ -192,7 +192,7 @@ static int drop_message=0; if(!drop_message && xp_core->video->num_slow_frames > 50) { drop_message=1; - if(MPXPCtx->mpxp_after_seek) MPXPCtx->mpxp_after_seek--; + if(mpxp_context().mpxp_after_seek) mpxp_context().mpxp_after_seek--; else MSG_WARN(MSGTR_SystemTooSlow); } MSG_D("\ndec_ahead_main: stalling: %i %i\n",dae_cuurr_vplayed(),dae_curr_decoded()); @@ -211,7 +211,7 @@ sleep_time=vplayer_compute_sleep_time(sh_audio,sh_video,&shva_prev,v_pts); if(!(vo_data->flags&256)){ /* flag 256 means: libvo driver does its timing (dvb card) */ - if(!vplayer_do_sleep(sh_audio,MPXPCtx->rtc_fd,sleep_time)) return 0; + if(!vplayer_do_sleep(sh_audio,mpxp_context().rtc_fd,sleep_time)) return 0; } player_idx=dae_next_played(xp_core->video); @@ -220,10 +220,10 @@ MSG_D("\ndec_ahead_main: schedule %u on screen\n",player_idx); t2=GetTimer()-t2; tt = t2*0.000001f; - MPXPCtx->bench->vout+=tt; + mpxp_context().bench->vout+=tt; if(mp_conf.benchmark) { /* we need compute draw_slice+change_frame here */ - MPXPCtx->bench->cur_vout+=tt; + mpxp_context().bench->cur_vout+=tt; } } MP_UNIT(NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-02 11:56:40
|
Revision: 498 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=498&view=rev Author: nickols_k Date: 2012-12-02 11:56:31 +0000 (Sun, 02 Dec 2012) Log Message: ----------- Redesign video filter system and make sh_video not available for it. Note: it seems that executable compiled with -g3 lost >500KB of size after applying this patch. Modified Paths: -------------- mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpdemux/stheader.h mplayerxp/libvo/img_format.cpp mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out.h mplayerxp/mp_msg.cpp mplayerxp/mplayerxp.cpp mplayerxp/postproc/vf.cpp mplayerxp/postproc/vf_1bpp.cpp mplayerxp/postproc/vf_2xsai.cpp mplayerxp/postproc/vf_aspect.cpp mplayerxp/postproc/vf_delogo.cpp mplayerxp/postproc/vf_denoise3d.cpp mplayerxp/postproc/vf_dint.cpp mplayerxp/postproc/vf_down3dright.cpp mplayerxp/postproc/vf_eq.cpp mplayerxp/postproc/vf_expand.cpp mplayerxp/postproc/vf_flip.cpp mplayerxp/postproc/vf_format.cpp mplayerxp/postproc/vf_framestep.cpp mplayerxp/postproc/vf_il.cpp mplayerxp/postproc/vf_menu.cpp mplayerxp/postproc/vf_mirror.cpp mplayerxp/postproc/vf_noise.cpp mplayerxp/postproc/vf_null.cpp mplayerxp/postproc/vf_ow.cpp mplayerxp/postproc/vf_palette.cpp mplayerxp/postproc/vf_panscan.cpp mplayerxp/postproc/vf_perspective.cpp mplayerxp/postproc/vf_pp.cpp mplayerxp/postproc/vf_raw.cpp mplayerxp/postproc/vf_rectangle.cpp mplayerxp/postproc/vf_rgb2bgr.cpp mplayerxp/postproc/vf_rotate.cpp mplayerxp/postproc/vf_scale.cpp mplayerxp/postproc/vf_smartblur.cpp mplayerxp/postproc/vf_softpulldown.cpp mplayerxp/postproc/vf_swapuv.cpp mplayerxp/postproc/vf_test.cpp mplayerxp/postproc/vf_unsharp.cpp mplayerxp/postproc/vf_vo.cpp mplayerxp/postproc/vf_yuvcsp.cpp mplayerxp/postproc/vf_yuy2.cpp mplayerxp/postproc/vf_yvu9.cpp Added Paths: ----------- mplayerxp/postproc/vf.h mplayerxp/postproc/vf_internal.h Removed Paths: ------------- mplayerxp/postproc/vf.h Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -73,11 +73,11 @@ { priv_t* priv=(priv_t*)opaque; sh_video_t* sh_video = priv->parent; - vf_instance_t* vf=sh_video->vfilter; + vf_stream_t* vs=sh_video->vfilter; vf_equalizer_t eq; eq.item=item; eq.value=value*10; - if(vf->control_vf(vf,VFCTRL_SET_EQUALIZER,&eq)!=MPXP_True) { + if(vf_control(vs,VFCTRL_SET_EQUALIZER,&eq)!=MPXP_True) { if(priv->mpvdec) return priv->mpvdec->control_vd(sh_video,VDCTRL_SET_EQUALIZER,(any_t*)item,(int)value); } return MPXP_False; @@ -88,7 +88,7 @@ sh_video_t* sh_video = priv->parent; if(!sh_video->inited) { delete priv; return; } MSG_V("uninit video ...\n"); - if(sh_video->vfilter && sh_video->vfilter_inited==1) vf_uninit_filter_chain(sh_video->vfilter); + if(sh_video->vfilter && sh_video->vfilter_inited==1) vf_uninit(sh_video->vfilter); priv->mpvdec->uninit(sh_video); sh_video->inited=0; delete priv; @@ -146,12 +146,25 @@ } any_t * mpcv_init(sh_video_t *sh_video,const char* codecname,const char * vfm,int status,any_t*libinput){ + UNUSED(codecname); + UNUSED(status); int done=0; const video_probe_t* vprobe=NULL; sh_video->codec=NULL; priv_t* priv = new(zeromem) priv_t; priv->parent=sh_video; priv->libinput=libinput; + + MP_UNIT("init_video_filters"); + if(sh_video->vfilter_inited<=0) { + vf_conf_t conf; + conf.w=sh_video->src_w; + conf.h=sh_video->src_h; + conf.fourcc=sh_video->fourcc; // may be NULL ??? + sh_video->vfilter=vf_init(libinput,&conf); + sh_video->vfilter_inited=1; + } + if(vfm) { priv->mpvdec=vfm_find_driver(vfm); if(priv->mpvdec) vprobe=priv->mpvdec->probe(sh_video,sh_video->fourcc); @@ -174,6 +187,8 @@ sh_video->codec=NULL; } else done=1; } + if(done) vf_showlist(sh_video->vfilter); + #ifdef ENABLE_WIN32LOADER if(sh_video->codec) { done=0; @@ -223,10 +238,10 @@ void mpcodecs_draw_image(sh_video_t* sh,mp_image_t *mpi) { - vf_instance_t* vf; + vf_stream_t* s; const unsigned h_step=16; unsigned num_slices = mpi->h/h_step; - vf=sh->vfilter; + s=sh->vfilter; if(!(mpi->flags&(MP_IMGFLAG_DRAW_CALLBACK))){ if(mpi->h%h_step) num_slices++; @@ -248,16 +263,16 @@ #ifdef _OPENMP if(use_vf_threads && (num_slices>smp_num_cpus)) { for(j=0;j<num_slices;j+=smp_num_cpus) { -#pragma omp parallel for shared(vf) private(i) +#pragma omp parallel for shared(s) private(i) for(i=j;i<smp_num_cpus;i++) { MSG_DBG2("parallel: dec_video.put_slice[%ux%u] %i %i %i %i\n",ampi[i]->width,ampi[i]->height,ampi[i]->x,ampi[i]->y,ampi[i]->w,ampi[i]->h); - vf->put_slice(vf,ampi[i]); + vf_put_slice(s,ampi[i]); free_mp_image(ampi[i]); } } for(;j<num_slices;j++) { MSG_DBG2("par_tail: dec_video.put_slice[%ux%u] %i %i %i %i\n",ampi[i]->width,ampi[i]->height,ampi[i]->x,ampi[i]->y,ampi[i]->w,ampi[i]->h); - vf->put_slice(vf,ampi[j]); + vf_put_slice(s,ampi[j]); free_mp_image(ampi[j]); } } @@ -267,13 +282,13 @@ /* execute slices instead of whole frame make faster multiple filters */ for(i=0;i<num_slices;i++) { MSG_DBG2("dec_video.put_slice[%ux%u] %i %i %i %i -> [%i]\n",ampi[i]->width,ampi[i]->height,ampi[i]->x,ampi[i]->y,ampi[i]->w,ampi[i]->h,ampi[i]->xp_idx); - vf->put_slice(vf,ampi[i]); + vf_put_slice(s,ampi[i]); free_mp_image(ampi[i]); } } } else { MSG_DBG2("Put whole frame[%ux%u]\n",mpi->width,mpi->height); - vf->put_slice(vf,mpi); + vf_put_slice(s,mpi); } free_mp_image(mpi); } @@ -283,16 +298,16 @@ int mpcv_decode(any_t *opaque,const enc_frame_t* frame){ priv_t* priv=(priv_t*)opaque; sh_video_t* sh_video = priv->parent; - vf_instance_t* vf; + vf_stream_t* s; mp_image_t *mpi=NULL; unsigned int t; unsigned int t2; double tt; - vf=sh_video->vfilter; + s=sh_video->vfilter; t=GetTimer(); - vf->control_vf(vf,VFCTRL_START_FRAME,NULL); + vf_control(s,VFCTRL_START_FRAME,NULL); sh_video->active_slices=0; mpi=priv->mpvdec->decode(sh_video, frame); @@ -409,7 +424,8 @@ int screen_size_x=0;//SCREEN_SIZE_X; int screen_size_y=0;//SCREEN_SIZE_Y; sh_video_t* sh = priv->parent; - vf_instance_t* vf=sh->vfilter,*sc=NULL; + vf_stream_t* s=sh->vfilter; + vf_conf_t conf; int palette=0; if(!(sh->src_w && sh->src_h)) @@ -432,9 +448,9 @@ int flags; out_fmt=sh->codec->outfmt[i]; if(out_fmt==0xFFFFFFFF||out_fmt==0x0) continue; - flags=vf_query_format(vf,out_fmt,w,h); + flags=vf_query_format(s,out_fmt,w,h); MSG_DBG2("vo_debug[step i=%d]: query(%s %ix%i) returned 0x%X for:\n",i,vo_format_name(out_fmt),w,h,flags); - if(mp_conf.verbose>1) if(mp_conf.verbose) vf_showlist(vf); + if(mp_conf.verbose>1) vf_showlist(s); if((flags&VFCAP_CSP_SUPPORTED_BY_HW) || ((flags&VFCAP_CSP_SUPPORTED) && j<0)){ // check (query) if codec really support this outfmt... sh->outfmtidx=j; // pass index to the control() function this way @@ -454,7 +470,7 @@ } if(j<0){ // TODO: no match - we should use conversion... - if(strcmp(vf->info->name,"fmtcvt") && palette!=1){ + if(strcmp(vf_get_first_name(s),"fmtcvt") && palette!=1){ int ind; MSG_WARN("Can't find colorspace for: "); for(ind=0;ind<CODECS_MAX_OUTFMT;ind++) { @@ -463,26 +479,24 @@ MSG_WARN("'%s' ",vo_format_name(sh->codec->outfmt[ind])); } MSG_WARN("Trying -vf fmtcvt\n"); - sc=vf=vf_open_filter(vf,sh,"fmtcvt",NULL,priv->libinput); + conf.w=sh->src_w; + conf.h=sh->src_h; + conf.fourcc=sh->codec->outfmt[sh->outfmtidx]; + vf_prepend_filter(s,"fmtcvt",&conf); goto csp_again; } else if(palette==1){ MSG_V("vd: Trying -vf palette...\n"); palette=-1; - vf=vf_open_filter(vf,sh,"palette",NULL,priv->libinput); + conf.w=sh->src_w; + conf.h=sh->src_h; + conf.fourcc=sh->codec->outfmt[sh->outfmtidx]; + vf_prepend_filter(s,"palette",&conf); goto csp_again; } else { // sws failed, if the last filter (vf_vo) support MPEGPES try to append vf_lavc - vf_instance_t* voi, *vp = NULL, *ve; - // Remove the scale filter if we added it ourself - if(vf == sc) { - ve = vf; - vf = vf->next; - vf_uninit_filter(ve); - } - // Find the last filter (vf_vo) - for(voi = vf ; voi->next ; voi = voi->next) - vp = voi; + // Remove the scale filter if we added it ourself + if(strcmp(vf_get_first_name(s),"fmtcvt")==0) vf_remove_first(s); } MSG_WARN(MSGTR_VOincompCodec); sh->vfilter_inited=-1; @@ -491,7 +505,6 @@ out_fmt=sh->codec->outfmt[j]; sh->outfmtidx=j; - sh->vfilter=vf; // autodetect flipping if(vo_conf.flip==0){ @@ -503,7 +516,10 @@ if(vo_data->flags&VFCAP_FLIPPED) vo_data->FLIP_REVERT(); if(vo_data->FLIP() && !(vo_data->flags&VFCAP_FLIP)){ // we need to flip, but no flipping filter avail. - sh->vfilter=vf=vf_open_filter(vf,sh,"flip",NULL,priv->libinput); + conf.w=sh->src_w; + conf.h=sh->src_h; + conf.fourcc=out_fmt; + vf_prepend_filter(s,"flip",&conf); } // time to do aspect ratio corrections... @@ -555,8 +571,8 @@ vo_data->flags, "MPlayerXP",vo_format_name(out_fmt)); - MSG_DBG2("vf configuring: %s\n",vf->info->name); - if(vf->config_vf(vf,sh->src_w,sh->src_h, +// MSG_DBG2("vf configuring: %s\n",vf->info->name); + if(vf_config(s,sh->src_w,sh->src_h, screen_size_x,screen_size_y, vo_data->flags, out_fmt)==0){ @@ -577,8 +593,9 @@ // returns NULL or allocated mp_image_t* // Note: buffer allocation may be moved to mpcodecs_config_vf() later... mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag,int w, int h){ - MSG_DBG2("mpcodecs_get_image(vf_%s,%i,%i,%i,%i) was called\n",((vf_instance_t *)(sh->vfilter))->info->name,mp_imgtype,mp_imgflag,w,h); - mp_image_t* mpi=vf_get_new_image(sh->vfilter,sh->codec->outfmt[sh->outfmtidx],mp_imgtype,mp_imgflag,w,h,dae_curr_vdecoded(xp_core)); + vf_stream_t* s = sh->vfilter; +// MSG_DBG2("mpcodecs_get_image(vf_%s,%i,%i,%i,%i) was called\n",((vf_instance_t *)(sh->vfilter))->info->name,mp_imgtype,mp_imgflag,w,h); + mp_image_t* mpi=vf_get_new_image(s,sh->codec->outfmt[sh->outfmtidx],mp_imgtype,mp_imgflag,w,h,dae_curr_vdecoded(xp_core)); mpi->x=mpi->y=0; if(mpi->xp_idx==XP_IDX_INVALID) MSG_V("[mpcodecs_get_image] Incorrect mpi->xp_idx. Be ready for segfault!\n"); @@ -586,6 +603,6 @@ } void mpcodecs_draw_slice(sh_video_t *sh, mp_image_t*mpi) { - vf_instance_t* vf = sh->vfilter; - vf->put_slice(vf,mpi); + vf_stream_t* vf = sh->vfilter; + vf_put_slice(vf,mpi); } Modified: mplayerxp/libmpdemux/stheader.h =================================================================== --- mplayerxp/libmpdemux/stheader.h 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/libmpdemux/stheader.h 2012-12-02 11:56:31 UTC (rev 498) @@ -74,7 +74,10 @@ unsigned codecdata_len; }; -struct vf_instance_t; +namespace mpxp { + struct vf_stream_t; +} + struct sh_video_t : public standard_header { public: sh_video_t() {} @@ -92,7 +95,7 @@ float aspect; unsigned int outfmtidx; // TODO: replace with out_fourcc /* vfilter chan */ - vf_instance_t* vfilter; + vf_stream_t* vfilter; int vfilter_inited; int vf_flags; unsigned active_slices; // used in dec_video+vd_ffmpeg only!!! Modified: mplayerxp/libvo/img_format.cpp =================================================================== --- mplayerxp/libvo/img_format.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/libvo/img_format.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -1,6 +1,7 @@ #include "mp_config.h" #include "osdep/mplib.h" using namespace mpxp; +#include <ctype.h> #include <stdio.h> #include <limits.h> #include "img_format.h" @@ -80,7 +81,11 @@ case IMGFMT_XVMC_MOCO_MPEG2: return("MPEG1/2 Motion Compensation"); case IMGFMT_XVMC_IDCT_MPEG2: return("MPEG1/2 Motion Compensation and IDCT"); } - snprintf(unknow_format,20,"Unknown 0x%04x",format); + char *p=reinterpret_cast<char *>(&format); + if(isprint(p[0])&&isprint(p[1])&&isprint(p[2])&&isprint(p[4])) + snprintf(unknow_format,20,"Unknown %c%c%c%c",p[0],p[1],p[2],p[3]); + else + snprintf(unknow_format,20,"Unknown 0x%04x",format); return unknow_format; } Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/libvo/video_out.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -36,7 +36,6 @@ #include "osdep/shmem.h" #include "mp_conf_lavc.h" -#include "postproc/vf.h" #include "xmpcore/xmp_core.h" #include "mplayerxp.h" #include "osdep/fastmemcpy.h" @@ -46,6 +45,7 @@ #include "dri_vo.h" #include "osd_render.h" #include "sub.h" +#include "postproc/vf.h" #include "vo_msg.h" namespace mpxp{ @@ -121,6 +121,7 @@ const vo_info_t* video_out; class VO_Interface* vo_iface; const OSD_Render* draw_alpha; + vf_stream_t* parent; }; vo_priv_t::vo_priv_t() { @@ -305,16 +306,17 @@ /* TODO: smart analizer of scaling possibilities of vo_driver */ if(is_resize) { xp_core->in_resize=1; - vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,1); + vf_reinit_vo(priv.parent,priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,1); } - vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,0); + vf_reinit_vo(priv.parent,priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,0); } -MPXP_Rc Video_Output::configure(uint32_t width, uint32_t height, uint32_t d_width, +MPXP_Rc Video_Output::configure(vf_stream_t* s,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, vo_flags_e _fullscreen, const char *title, uint32_t format) { vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); + priv.parent=s; MPXP_Rc retval; unsigned dest_fourcc,w,d_w,h,d_h; MSG_DBG3("dri_vo_dbg: vo_config\n"); Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/libvo/video_out.h 2012-12-02 11:56:31 UTC (rev 498) @@ -146,6 +146,7 @@ virtual ~video_private() {} }; + struct vf_stream_t; class Video_Output { public: Video_Output(); @@ -168,7 +169,7 @@ virtual MPXP_Rc init(const char *driver_name) const; virtual void print_help() const; virtual const vo_info_t* get_info() const; - virtual MPXP_Rc configure(uint32_t width, uint32_t height, uint32_t d_width, + virtual MPXP_Rc configure(vf_stream_t* parent,uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, vo_flags_e fullscreen,const char *title, uint32_t format); virtual uint32_t query_format(uint32_t* fourcc,unsigned src_w,unsigned src_h) const; Modified: mplayerxp/mp_msg.cpp =================================================================== --- mplayerxp/mp_msg.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/mp_msg.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -86,7 +86,7 @@ int mpxp_printf( unsigned x, const char *format, ... ){ /* TODO: more useful usage of module_id */ int rc=0; - char sbuf[0xFFFF]; + char* sbuf=new char[0xFFFFF]; unsigned ssize; unsigned level=(x>>28)&0xF; unsigned mod=x&0x0FFFFFFF; @@ -125,6 +125,7 @@ else was_eol=0; fflush(stderr); // if(priv) pthread_mutex_unlock(&priv->mp_msg_mutex); + delete sbuf; return rc; } Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/mplayerxp.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -1917,11 +1917,6 @@ /*================== Init VIDEO (codec & libvo) ==========================*/ if(!sh_video) goto main; - MP_UNIT("init_video_filters"); - if(sh_video->vfilter_inited<=0) { - sh_video->vfilter=vf_init(sh_video,MPXPSys.libinput()); - sh_video->vfilter_inited=1; - } if((MPXPSys.find_vcodec())!=MPXP_Ok) { sh_video=reinterpret_cast<sh_video_t*>(MPXPSys.demuxer()->video->sh); if(!sh_audio) goto goto_next_file; @@ -1942,7 +1937,6 @@ mpcv_set_quality(mpxp_context().video().decoder,mpxp_context().output_quality); } - vf_showlist(reinterpret_cast<vf_instance_t*>(sh_video->vfilter)); // ========== Init display (sh_video->src_w*sh_video->src_h/out_fmt) ============ MPXPSys.inited_flags|=INITED_VO; Modified: mplayerxp/postproc/vf.cpp =================================================================== --- mplayerxp/postproc/vf.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -13,6 +13,7 @@ #include "libvo/video_out.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "libmpconf/codec-cfg.h" @@ -282,11 +283,14 @@ // By default vf doesn't accept MPEGPES static int __FASTCALL__ vf_default_query_format(vf_instance_t* vf, unsigned int fmt,unsigned w,unsigned h){ - if(fmt == IMGFMT_MPEGPES) return 0; - return 1;//vf_next_query_format(vf,fmt,w,h); + UNUSED(vf); + UNUSED(w); + UNUSED(h); + if(fmt == IMGFMT_MPEGPES) return 0; + return 1;//vf_next_query_format(vf,fmt,w,h); } -static vf_instance_t* __FASTCALL__ vf_open_plugin(vf_instance_t* next,sh_video_t *sh,const char *name,const char *args,any_t* libinput){ +static vf_instance_t* __FASTCALL__ vf_open_plugin(vf_instance_t* next,const char *name,const char *args,any_t* libinput,const vf_conf_t* conf){ vf_instance_t* vf; int i; for(i=0;;i++){ @@ -308,10 +312,9 @@ vf->put_slice=vf_next_put_slice; vf->default_caps=VFCAP_ACCEPT_STRIDE; vf->default_reqs=0; - vf->sh=sh; - vf->dw=sh->src_w; - vf->dh=sh->src_h; - vf->dfourcc=sh->fourcc; + vf->conf.w=conf->w; + vf->conf.h=conf->h; + vf->conf.fourcc=conf->fourcc; vf->libinput=libinput; if(next) next->prev=vf; if(vf->info->open(vf,(char*)args)==MPXP_Ok) return vf; // Success! @@ -320,23 +323,22 @@ return NULL; } -vf_instance_t* __FASTCALL__ vf_open_filter(vf_instance_t* next,sh_video_t *sh,const char *name,const char *args,any_t*libinput){ +vf_instance_t* __FASTCALL__ vf_open_filter(vf_instance_t* next,const char *name,const char *args,any_t*libinput,const vf_conf_t* conf){ if(strcmp(name,"vo")) { - MSG_V("Open video filter: [%s]\n", name); + MSG_V("Open video filter: [%s] <%ux%u %s>\n", name,conf->w,conf->h,vo_format_name(conf->fourcc)); } if(next) check_pin("vfilter",next->pin,VF_PIN); - return vf_open_plugin(next,sh,name,args,libinput); + return vf_open_plugin(next,name,args,libinput,conf); } //============================================================================ - -unsigned int __FASTCALL__ vf_match_csp(vf_instance_t** vfp,unsigned int* list,unsigned int preferred,unsigned w,unsigned h){ +unsigned int __FASTCALL__ vf_match_csp(vf_instance_t** vfp,unsigned int* list,const vf_conf_t* conf){ vf_instance_t* vf=*vfp; unsigned int* p; unsigned int best=0; int ret; if((p=list)) while(*p){ - ret=vf->query_format(vf,*p,w,h); + ret=vf->query_format(vf,*p,conf->w,conf->h); MSG_V("[%s] query(%s) -> %d\n",vf->info->name,vo_format_name(*p),ret&3); if(ret&2){ best=*p; break;} // no conversion -> bingo! if(ret&1 && !best) best=*p; // best with conversion @@ -345,13 +347,14 @@ if(best) return best; // bingo, they have common csp! // ok, then try with scale: if(vf->info == &vf_info_scale) return 0; // avoid infinite recursion! - vf=vf_open_filter(vf,vf->sh,"fmtcvt",NULL,vf->libinput); + vf=vf_open_filter(vf,"fmtcvt",NULL,vf->libinput,conf); if(!vf) return 0; // failed to init "scale" // try the preferred csp first: - if(preferred && vf->query_format(vf,preferred,w,h)) best=preferred; else + if(conf->fourcc && vf->query_format(vf,conf->fourcc,conf->w,conf->h)) best=conf->fourcc; + else // try the list again, now with "scaler" : if((p=list)) while(*p){ - ret=vf->query_format(vf,*p,w,h); + ret=vf->query_format(vf,*p,conf->w,conf->h); MSG_V("[%s] query(%s) -> %d\n",vf->info->name,vo_format_name(*p),ret&3); if(ret&2){ best=*p; break;} // no conversion -> bingo! if(ret&1 && !best) best=*p; // best with conversion @@ -378,15 +381,12 @@ vo_flags_e voflags, unsigned int outfmt){ int miss; int flags=vf_next_query_format(vf,outfmt,d_width,d_height); - vf->dw=width; - vf->dh=height; - vf->dfourcc=outfmt; if(!flags){ // hmm. colorspace mismatch!!! // let's insert the 'scale' filter, it does the job for us: vf_instance_t* vf2; if(vf->next->info==&vf_info_scale) return 0; // scale->scale - vf2=vf_open_filter(vf->next,vf->sh,"scale",NULL,vf->libinput); + vf2=vf_open_filter(vf->next,"scale",NULL,vf->libinput,&vf->conf); if(!vf2) return 0; // shouldn't happen! vf->next=vf2; flags=vf_next_query_format(vf->next,outfmt,d_width,d_height); @@ -400,7 +400,7 @@ if(miss&VFCAP_ACCEPT_STRIDE){ // vf requires stride support but vf->next doesn't support it! // let's insert the 'expand' filter, it does the job for us: - vf_instance_t* vf2=vf_open_filter(vf->next,vf->sh,"expand",NULL,vf->libinput); + vf_instance_t* vf2=vf_open_filter(vf->next,"expand",NULL,vf->libinput,&vf->conf); if(!vf2) return 0; // shouldn't happen! vf->next=vf2; } @@ -422,9 +422,6 @@ int __FASTCALL__ vf_query_format(vf_instance_t* vf, unsigned int fmt,unsigned width,unsigned height) { - vf->dw=width; - vf->dh=height; - vf->dfourcc=fmt; check_pin("vfilter",vf->pin,VF_PIN); return vf->query_format(vf,fmt,width,height); } @@ -459,25 +456,14 @@ } } -void vf_help(){ - int i=0; - MSG_INFO( "Available video filters:\n"); - while(filter_list[i]){ - MSG_INFO("\t%-10s: %s\n",filter_list[i]->name,filter_list[i]->info); - i++; - } - MSG_INFO("\n"); -} - extern vf_cfg_t vf_cfg; -static sh_video_t *sh_video; -vf_instance_t* __FASTCALL__ vf_init(sh_video_t *sh,any_t* libinput) +vf_instance_t* __FASTCALL__ vf_init_filter(any_t* libinput,const vf_conf_t* conf) { char *vf_last=NULL,*vf_name=vf_cfg.list; char *arg; vf_instance_t* vfi=NULL,*vfi_prev=NULL,*vfi_first; - sh_video=sh; - vfi=vf_open_filter(NULL,sh,"vo",NULL,libinput); +// sh_video=sh; + vfi=vf_open_filter(NULL,"vo",NULL,libinput,conf); vfi_prev=vfi; if(vf_name) while(vf_name!=vf_last){ @@ -487,7 +473,7 @@ arg=strchr(vf_last,'='); if(arg) { *arg=0; arg++; } MSG_V("Attach filter %s\n",vf_last); - vfi=vf_open_plugin(vfi,sh,vf_last,arg,libinput); + vfi=vf_open_plugin(vfi,vf_last,arg,libinput,conf); if(!vfi) vfi=vfi_prev; vfi_prev=vfi; } @@ -524,7 +510,7 @@ if(next->print_conf) next->print_conf(next); else MSG_INFO("[vf_%s] %s [%dx%d,%s] \n",next->info->name,next->info->info, - next->dw,next->dh,vo_format_name(next->dfourcc)); + next->conf.w,next->conf.h,vo_format_name(next->conf.fourcc)); next=next->next; }while(next); } @@ -544,31 +530,45 @@ static int __FASTCALL__ dummy_config(vf_instance_t* vf, int width, int height, int d_width, int d_height, vo_flags_e voflags, unsigned int outfmt){ + UNUSED(vf); + UNUSED(width); + UNUSED(height); + UNUSED(d_width); + UNUSED(d_height); + UNUSED(voflags); + UNUSED(outfmt); return 1; } -static void vf_report_chain(void) +static void vf_report_chain(vf_instance_t* first) { - vf_instance_t *_this=sh_video->vfilter; - MSG_V("sh_video: %ix%i@%s\n",sh_video->src_w,sh_video->src_h,vo_format_name(sh_video->codec->outfmt[sh_video->outfmtidx])); + vf_instance_t *_this=first; + MSG_V("vf->first: %ix%i@%s\n",first->conf.w,first->conf.h,vo_format_name(first->conf.fourcc)); while(1) { if(!_this) break; - MSG_V("%s[%ux%i@%s](%s, %s)\n" - ,_this->info->name - ,_this->dw,_this->dh,vo_format_name(_this->dfourcc) - ,_this->prev?_this->prev->info->name:"NULL",_this->next?_this->next->info->name:"NULL"); + MSG_V("[%ux%i@%s](%s<-%s->%s)\n" + ,_this->conf.w + ,_this->conf.h + ,vo_format_name(_this->conf.fourcc) + ,_this->prev?_this->prev->info->name:"NULL" + ,_this->info->name + ,_this->next?_this->next->info->name:"NULL"); _this=_this->next; } } -void __FASTCALL__ vf_reinit_vo(unsigned w,unsigned h,unsigned fmt,int reset_cache) +vf_instance_t* __FASTCALL__ vf_reinit_vo(vf_instance_t* first,unsigned w,unsigned h,unsigned fmt,int reset_cache) { vf_instance_t *vf_scaler=NULL; vf_instance_t* _saved=NULL; - vf_instance_t* _this=sh_video->vfilter; + vf_instance_t* _this=first; + vf_instance_t* _first=first; unsigned sw,sh,sfourcc; - MSG_V("Call vf_reinit_vo %ix%i@%s\n",w,h,vo_format_name(fmt)); - _this=sh_video->vfilter; + MSG_V("Call vf_reinit_vo <%s: %ix%i@%s> -> <vo: %ix%i@%s>\n" + ,_first->info->name + ,_first->conf.w,_first->conf.h,vo_format_name(_first->conf.fourcc) + ,w,h,vo_format_name(fmt)); + _this=first; _saved=NULL; while(1) { @@ -577,7 +577,7 @@ _saved=_this; _this=_this->next; } - vf_report_chain(); + vf_report_chain(_first); _this=_saved->prev; if(_this) if(strcmp(_this->info->name,"fmtcvt")==0 || strcmp(_this->info->name,"scale")==0) @@ -586,13 +586,13 @@ MSG_V("Unlinking 'fmtcvt'\n"); i=_this->prev; if(i) i->next=_this->next; - else sh_video->vfilter=_this->next; + else first=_this->next; _this->next->prev=i; vf_uninit_filter(_this); - vf_report_chain(); + vf_report_chain(_this); } /* _this == vo */ - _this=sh_video->vfilter; + _this=first; _saved=NULL; while(1) { @@ -603,24 +603,24 @@ _this=_saved; if(_this->prev) { - sw=_this->prev->dw; - sh=_this->prev->dh; - sfourcc=_this->prev->dfourcc; + sw=_this->prev->conf.w; + sh=_this->prev->conf.h; + sfourcc=_this->prev->conf.fourcc; MSG_V("Using(%s) %ix%i@%s\n",_this->prev->info->name,sw,sh,vo_format_name(sfourcc)); } else { - sw=sh_video->src_w; - sh=sh_video->src_h; - sfourcc=sh_video->codec->outfmt[sh_video->outfmtidx]; - MSG_V("Using(sh_video) %ix%i@%s\n",sw,sh,vo_format_name(sfourcc)); + sw=_first->conf.w; + sh=_first->conf.h; + sfourcc=_first->conf.fourcc; + MSG_V("Using(first:%s) %ix%i@%s\n",first->info->name,sw,sh,vo_format_name(sfourcc)); } if(w==sw && h==sh && fmt==sfourcc); /* nothing todo */ else { MSG_V("vf_reinit->config_vf %i %i %s=> %i %i %s\n",sw,sh,vo_format_name(sfourcc),w,h,vo_format_name(fmt)); _saved=_this->prev; - vf_scaler=vf_open_filter(_this,sh_video,(w==sw&&h==sh)?"fmtcvt":"scale",NULL,_this->libinput); + vf_scaler=vf_open_filter(_this,(w==sw&&h==sh)?"fmtcvt":"scale",NULL,_this->libinput,&_first->conf); if(vf_scaler) { vf_config_fun_t sfnc; @@ -640,14 +640,115 @@ MSG_V("Insert scaler before '%s' after '%s'\n",_this->info->name,_saved?_saved->info->name:"NULL"); vf_scaler->prev=_saved; if(_saved) _saved->next=vf_scaler; - else sh_video->vfilter=vf_scaler; - _this->dw=w; - _this->dh=h; - _this->dfourcc=fmt; + else first=vf_scaler; + _this->conf.w=w; + _this->conf.h=h; + _this->conf.fourcc=fmt; if(reset_cache) mpxp_reset_vcache(); vo_data->reset(); } } - _this=sh_video->vfilter; - vf_report_chain(); + _this=first; + vf_report_chain(_this); + return _this; } + +vf_instance_t* __FASTCALL__ vf_first(const vf_instance_t* it) { + vf_instance_t* curr = const_cast<vf_instance_t*>(it); + while(curr->prev) curr=curr->prev; + return curr; +} + +vf_instance_t* __FASTCALL__ vf_last(const vf_instance_t* it) { + vf_instance_t* curr = const_cast<vf_instance_t*>(it); + while(curr->next) curr=curr->next; + return curr; +} +/*----------------------------------------*/ +namespace mpxp { + +void vf_help(){ + int i=0; + MSG_INFO( "Available video filters:\n"); + while(filter_list[i]){ + MSG_INFO("\t%-10s: %s\n",filter_list[i]->name,filter_list[i]->info); + i++; + } + MSG_INFO("\n"); +} + +vf_stream_t* vf_init(any_t* libinput,const vf_conf_t* conf) { + vf_stream_t* s = new(zeromem) vf_stream_t; + s->libinput=libinput; + s->first=vf_init_filter(libinput,conf); + s->first->parent=s; + return s; +} + +void vf_uninit(vf_stream_t* s) { vf_uninit_filter_chain(s->first); delete s; } + +void __FASTCALL__ vf_reinit_vo(vf_stream_t* s,unsigned w,unsigned h,unsigned fmt,int reset_cache) { + vf_instance_t* first=s->first; + MSG_V("[stream: vf_reinit_vo]: %p\n",first); + if(first) s->first=vf_reinit_vo(first,w,h,fmt,reset_cache); +} + +void __FASTCALL__ vf_showlist(vf_stream_t* s) { vf_showlist(s->first); } + +int __FASTCALL__ vf_query_flags(vf_stream_t* s) { + vf_instance_t* first=s->first; + return vf_query_flags(first); +} + +int __FASTCALL__ vf_config(vf_stream_t* s, + int width, int height, int d_width, int d_height, + vo_flags_e flags, unsigned int outfmt) { + vf_instance_t* first=s->first; + return first->config_vf(first,width,height,d_width,d_height,flags,outfmt); +} +int __FASTCALL__ vf_query_format(vf_stream_t* s,unsigned int fmt,unsigned w,unsigned h) { + vf_instance_t* first=s->first; + return first->query_format(first,fmt,w,h); +} +void __FASTCALL__ vf_get_image(vf_stream_t* s,mp_image_t *mpi) { + vf_instance_t* first=s->first; + return first->get_image(first,mpi); +} +int __FASTCALL__ vf_put_slice(vf_stream_t* s,mp_image_t *mpi) { + vf_instance_t* first=s->first; + return first->put_slice(first,mpi); +} +void __FASTCALL__ vf_start_slice(vf_stream_t* s,mp_image_t *mpi) { + vf_instance_t* first=s->first; + return first->start_slice(first,mpi); +} + +MPXP_Rc __FASTCALL__ vf_control(vf_stream_t* s,int request, any_t* data) { + vf_instance_t* first=s->first; + return first->control_vf(first,request,data); +} + +mp_image_t* __FASTCALL__ vf_get_new_image(vf_stream_t* s, unsigned int outfmt, int mp_imgtype, int mp_imgflag, int w, int h,unsigned idx) { + vf_instance_t* first=s->first; + return vf_get_new_image(first,outfmt,mp_imgtype,mp_imgflag,w,h,idx); +} + +void __FASTCALL__ vf_prepend_filter(vf_stream_t* s,const char *name,const vf_conf_t* conf,const char *args) { + vf_instance_t* first=s->first; + s->first=vf_open_filter(first,name,args,s->libinput,conf); + s->first->parent=s; +} + +void __FASTCALL__ vf_remove_first(vf_stream_t* s) { + vf_instance_t* first=s->first; + if(first->next) { + s->first=first->next; + vf_uninit_filter(first); + } +} + +const char * __FASTCALL__ vf_get_first_name(vf_stream_t* s) { + vf_instance_t* first=s->first; + return first->info->name; +} +} // namespace mpxp Deleted: mplayerxp/postproc/vf.h =================================================================== --- mplayerxp/postproc/vf.h 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf.h 2012-12-02 11:56:31 UTC (rev 498) @@ -1,143 +0,0 @@ -#ifndef __VF_H -#define __VF_H 1 -#include "xmpcore/xmp_enums.h" -#include "libmpstream/stream.h" -#include "libmpdemux/demuxer.h" -#include "libmpdemux/stheader.h" -#include "libvo/video_out.h" // for vo_flags_e - -struct vf_instance_t; -struct vf_priv_t; - -enum { - VF_FLAGS_THREADS =0x00000001UL, /**< Thread safe plugin (requires to be applied within of threads) */ - VF_FLAGS_OSD =0x00000002UL, /**< requires to be applied during page flipping */ - VF_FLAGS_SLICES =0x00000004UL /**< really can draw slices (requires to be applied on SMP etc) */ -}; - -struct vf_info_t { - const char *info; - const char *name; - const char *author; - const char *comment; - const unsigned flags; - MPXP_Rc (* __FASTCALL__ open)(vf_instance_t* vf,const char* args); -}; - -struct vf_image_context_t { - unsigned char* static_planes[2]; - int static_idx; -}; - -enum { - VF_PIN=RND_NUMBER7+RND_CHAR7 -}; - -typedef int (* __FASTCALL__ vf_config_fun_t)(vf_instance_t* vf, - int width, int height, int d_width, int d_height, - vo_flags_e flags, unsigned int outfmt); -struct vf_instance_t { - const vf_info_t* info; - char antiviral_hole[RND_CHAR5]; - unsigned pin; // personal identification number - // funcs: - int (* __FASTCALL__ config_vf)(vf_instance_t* vf, - int width, int height, int d_width, int d_height, - vo_flags_e flags, unsigned int outfmt); - MPXP_Rc (* __FASTCALL__ control_vf)(vf_instance_t* vf, - int request, any_t* data); - int (* __FASTCALL__ query_format)(vf_instance_t* vf, - unsigned int fmt,unsigned w,unsigned h); - void (* __FASTCALL__ get_image)(vf_instance_t* vf, - mp_image_t *mpi); - int (* __FASTCALL__ put_slice)(vf_instance_t* vf, - mp_image_t *mpi); - void (* __FASTCALL__ start_slice)(vf_instance_t* vf, - mp_image_t *mpi); - void (* __FASTCALL__ uninit)(vf_instance_t* vf); - // optional: maybe NULL - void (* __FASTCALL__ print_conf)(vf_instance_t* vf); - // caps: - unsigned int default_caps; // used by default query_format() - unsigned int default_reqs; // used by default config() - // data: - vf_image_context_t imgctx; - vf_instance_t* next; - vf_instance_t* prev; - mp_image_t *dmpi; - vf_priv_t* priv; - sh_video_t *sh; - /* configuration for outgoing stream */ - unsigned dw,dh,dfourcc; - /* event handler*/ - any_t* libinput; -}__attribute__ ((packed)); - -// Configuration switches -struct vf_cfg_t{ - int force; // Initialization type - char* list; /* list of names of filters that are added to filter - list during first initialization of stream */ -}; - -// control codes: -#include "mpc_info.h" - -struct vf_equalizer_t -{ - const char *item; - int value; -}; - -enum { - VFCTRL_QUERY_MAX_PP_LEVEL =4, /* test for postprocessing support (max level) */ - VFCTRL_SET_PP_LEVEL =5, /* set postprocessing level */ - VFCTRL_SET_EQUALIZER =6, /* set color options (brightness,contrast etc) */ - VFCTRL_GET_EQUALIZER =8, /* gset color options (brightness,contrast etc) */ - VFCTRL_START_FRAME =7, - VFCTRL_CHANGE_RECTANGLE =9, /* Change the rectangle boundaries */ - VFCTRL_RESERVED =10, /* Tell the vo to flip pages */ - VFCTRL_DUPLICATE_FRAME =11, /* For encoding - encode zero-change frame */ - VFCTRL_SKIP_NEXT_FRAME =12, /* For encoding - drop the next frame that passes thru */ - VFCTRL_FLUSH_PAGES =13 /* For encoding - flush delayed frames */ -}; -#include "vfcap.h" - -// functions: - -vf_instance_t* __FASTCALL__ vf_init(sh_video_t *sh,any_t* libinput); -void __FASTCALL__ vf_reinit_vo(unsigned w,unsigned h,unsigned fmt,int reset_cache); - -void __FASTCALL__ vf_mpi_clear(mp_image_t* mpi,int x0,int y0,int w,int h); -mp_image_t* __FASTCALL__ vf_get_new_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype, int mp_imgflag, int w, int h,unsigned idx); -mp_image_t* __FASTCALL__ vf_get_new_genome(vf_instance_t* vf, const mp_image_t* mpi); -mp_image_t* __FASTCALL__ vf_get_new_exportable_genome(vf_instance_t* vf, int mp_imgtype, int mp_imgflag, const mp_image_t* mpi); -mp_image_t* __FASTCALL__ vf_get_new_temp_genome(vf_instance_t* vf, const mp_image_t* mpi); -int __FASTCALL__ vf_query_format(vf_instance_t* vf, unsigned int fmt,unsigned width,unsigned height); - -vf_instance_t* __FASTCALL__ vf_open_filter(vf_instance_t* next,sh_video_t *sh,const char *name,const char *args,any_t*libinput); -vf_instance_t* __FASTCALL__ vf_open_encoder(vf_instance_t* next,const char *name,const char *args); - -unsigned int __FASTCALL__ vf_match_csp(vf_instance_t** vfp,unsigned int* list,unsigned int preferred,unsigned w,unsigned h); -void __FASTCALL__ vf_clone_mpi_attributes(mp_image_t* dst, mp_image_t* src); - -// default wrappers: -int __FASTCALL__ vf_next_config(vf_instance_t* vf, - int width, int height, int d_width, int d_height, - vo_flags_e flags, unsigned int outfmt); -MPXP_Rc __FASTCALL__ vf_next_control(vf_instance_t* vf, int request, any_t* data); -int __FASTCALL__ vf_next_query_format(vf_instance_t* vf, unsigned int fmt,unsigned w,unsigned h); -int __FASTCALL__ vf_next_put_slice(vf_instance_t* vf,mp_image_t *mpi); - -vf_instance_t* __FASTCALL__ append_filters(vf_instance_t* last); - -/* returns ANDed flags of whole chain */ -unsigned __FASTCALL__ vf_query_flags(vf_instance_t*vfi); - -void vf_help(); - -void __FASTCALL__ vf_uninit_filter(vf_instance_t* vf); -void __FASTCALL__ vf_uninit_filter_chain(vf_instance_t* vf); -void __FASTCALL__ vf_showlist(vf_instance_t* vf); - -#endif Added: mplayerxp/postproc/vf.h =================================================================== --- mplayerxp/postproc/vf.h (rev 0) +++ mplayerxp/postproc/vf.h 2012-12-02 11:56:31 UTC (rev 498) @@ -0,0 +1,75 @@ +#ifndef __VF_H_INCLUDED +#define __VF_H_INCLUDED 1 +#include <stdint.h> +#include "xmpcore/xmp_enums.h" +#include "xmpcore/mp_image.h" +#include "libvo/video_out.h" // for vo_flags_e +#include "vfcap.h" + +struct vf_instance_t; +namespace mpxp { + enum { + VF_FLAGS_THREADS =0x00000001UL, /**< Thread safe plugin (requires to be applied within of threads) */ + VF_FLAGS_OSD =0x00000002UL, /**< requires to be applied during page flipping */ + VF_FLAGS_SLICES =0x00000004UL /**< really can draw slices (requires to be applied on SMP etc) */ + }; + + enum { + VFCTRL_QUERY_MAX_PP_LEVEL=4, /* test for postprocessing support (max level) */ + VFCTRL_SET_PP_LEVEL =5, /* set postprocessing level */ + VFCTRL_SET_EQUALIZER =6, /* set color options (brightness,contrast etc) */ + VFCTRL_GET_EQUALIZER =8, /* gset color options (brightness,contrast etc) */ + VFCTRL_START_FRAME =7, + VFCTRL_CHANGE_RECTANGLE =9, /* Change the rectangle boundaries */ + VFCTRL_RESERVED =10, /* Tell the vo to flip pages */ + VFCTRL_DUPLICATE_FRAME =11, /* For encoding - encode zero-change frame */ + VFCTRL_SKIP_NEXT_FRAME =12, /* For encoding - drop the next frame that passes thru */ + VFCTRL_FLUSH_PAGES =13 /* For encoding - flush delayed frames */ + }; + + struct vf_equalizer_t { + const char *item; + int value; + }; + + // Configuration switches + struct vf_cfg_t{ + int force; // Initialization type + char* list; /* list of names of filters that are added to filter + list during first initialization of stream */ + }; + + struct vf_conf_t { + unsigned w; + unsigned h; + uint32_t fourcc; + }; + + struct vf_stream_t { + vf_instance_t* first; + any_t* libinput; + }; + + vf_stream_t* __FASTCALL__ vf_init(any_t* libinput,const vf_conf_t* conf); + void __FASTCALL__ vf_uninit(vf_stream_t* s); + void __FASTCALL__ vf_reinit_vo(vf_stream_t* s,unsigned w,unsigned h,unsigned fmt,int reset_cache); + + void __FASTCALL__ vf_showlist(vf_stream_t* s); + void vf_help(); + + int __FASTCALL__ vf_query_flags(vf_stream_t* s); + int __FASTCALL__ vf_config(vf_stream_t* s, + int width, int height, int d_width, int d_height, + vo_flags_e flags, unsigned int outfmt); + int __FASTCALL__ vf_query_format(vf_stream_t* s,unsigned int fmt,unsigned w,unsigned h); + void __FASTCALL__ vf_get_image(vf_stream_t* s,mp_image_t *mpi); + int __FASTCALL__ vf_put_slice(vf_stream_t* s,mp_image_t *mpi); + void __FASTCALL__ vf_start_slice(vf_stream_t* s,mp_image_t *mpi); + MPXP_Rc __FASTCALL__ vf_control(vf_stream_t* s,int request, any_t* data); + mp_image_t* __FASTCALL__ vf_get_new_image(vf_stream_t* s, unsigned int outfmt, int mp_imgtype, int mp_imgflag, int w, int h,unsigned idx); + void __FASTCALL__ vf_prepend_filter(vf_stream_t* s,const char *name,const vf_conf_t* conf,const char *args=NULL); + void __FASTCALL__ vf_remove_first(vf_stream_t* s); + const char * __FASTCALL__ vf_get_first_name(vf_stream_t* s); +} // namespace +#endif + Property changes on: mplayerxp/postproc/vf.h ___________________________________________________________________ Added: svn:eol-style + native Modified: mplayerxp/postproc/vf_1bpp.cpp =================================================================== --- mplayerxp/postproc/vf_1bpp.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_1bpp.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "postproc/swscale.h" #include "pp_msg.h" Modified: mplayerxp/postproc/vf_2xsai.cpp =================================================================== --- mplayerxp/postproc/vf_2xsai.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_2xsai.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "pp_msg.h" //===========================================================================// Modified: mplayerxp/postproc/vf_aspect.cpp =================================================================== --- mplayerxp/postproc/vf_aspect.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_aspect.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "pp_msg.h" struct vf_priv_t { Modified: mplayerxp/postproc/vf_delogo.cpp =================================================================== --- mplayerxp/postproc/vf_delogo.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_delogo.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -32,6 +32,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" @@ -241,7 +242,8 @@ vf->priv->yoff -= vf->priv->band; // check csp: - vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,IMGFMT_YV12,1,1); + vf_conf_t conf = { 1, 1, IMGFMT_YV12 }; + vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,&conf); if(!vf->priv->outfmt) { uninit(vf); return MPXP_False; // no csp match :( Modified: mplayerxp/postproc/vf_denoise3d.cpp =================================================================== --- mplayerxp/postproc/vf_denoise3d.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_denoise3d.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -28,6 +28,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" Modified: mplayerxp/postproc/vf_dint.cpp =================================================================== --- mplayerxp/postproc/vf_dint.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_dint.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -11,6 +11,7 @@ #include "xmpcore/mp_image.h" #include "libvo/img_format.h" #include "vf.h" +#include "vf_internal.h" #include "pp_msg.h" struct vf_priv_t { Modified: mplayerxp/postproc/vf_down3dright.cpp =================================================================== --- mplayerxp/postproc/vf_down3dright.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_down3dright.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -11,6 +11,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "postproc/swscale.h" Modified: mplayerxp/postproc/vf_eq.cpp =================================================================== --- mplayerxp/postproc/vf_eq.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_eq.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -24,6 +24,7 @@ #include "libvo/video_out.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #ifdef USE_SETLOCALE #include <locale.h> Modified: mplayerxp/postproc/vf_expand.cpp =================================================================== --- mplayerxp/postproc/vf_expand.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_expand.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -10,6 +10,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" Modified: mplayerxp/postproc/vf_flip.cpp =================================================================== --- mplayerxp/postproc/vf_flip.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_flip.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -27,6 +27,7 @@ #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "libvo/video_out.h" Modified: mplayerxp/postproc/vf_format.cpp =================================================================== --- mplayerxp/postproc/vf_format.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_format.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "pp_msg.h" struct vf_priv_t { Modified: mplayerxp/postproc/vf_framestep.cpp =================================================================== --- mplayerxp/postproc/vf_framestep.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_framestep.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -60,6 +60,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "pp_msg.h" /* Uncomment if you want to print some info on the format */ Modified: mplayerxp/postproc/vf_il.cpp =================================================================== --- mplayerxp/postproc/vf_il.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_il.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -28,6 +28,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" Copied: mplayerxp/postproc/vf_internal.h (from rev 496, mplayerxp/postproc/vf.h) =================================================================== --- mplayerxp/postproc/vf_internal.h (rev 0) +++ mplayerxp/postproc/vf_internal.h 2012-12-02 11:56:31 UTC (rev 498) @@ -0,0 +1,107 @@ +#ifndef __VF_H +#define __VF_H 1 +#include "vf.h" + +struct vf_instance_t; +struct vf_priv_t; + +struct vf_info_t { + const char *info; + const char *name; + const char *author; + const char *comment; + const unsigned flags; + MPXP_Rc (* __FASTCALL__ open)(vf_instance_t* vf,const char* args); +}; + +struct vf_image_context_t { + unsigned char* static_planes[2]; + int static_idx; +}; + +enum { + VF_PIN=RND_NUMBER7+RND_CHAR7 +}; + +typedef int (* __FASTCALL__ vf_config_fun_t)(vf_instance_t* vf, + int width, int height, int d_width, int d_height, + vo_flags_e flags, unsigned int outfmt); +struct vf_instance_t { + const vf_info_t* info; + char antiviral_hole[RND_CHAR5]; + unsigned pin; // personal identification number + // funcs: + int (* __FASTCALL__ config_vf)(vf_instance_t* vf, + int width, int height, int d_width, int d_height, + vo_flags_e flags, unsigned int outfmt); + MPXP_Rc (* __FASTCALL__ control_vf)(vf_instance_t* vf, + int request, any_t* data); + int (* __FASTCALL__ query_format)(vf_instance_t* vf, + unsigned int fmt,unsigned w,unsigned h); + void (* __FASTCALL__ get_image)(vf_instance_t* vf, + mp_image_t *mpi); + int (* __FASTCALL__ put_slice)(vf_instance_t* vf, + mp_image_t *mpi); + void (* __FASTCALL__ start_slice)(vf_instance_t* vf, + mp_image_t *mpi); + void (* __FASTCALL__ uninit)(vf_instance_t* vf); + // optional: maybe NULL + void (* __FASTCALL__ print_conf)(vf_instance_t* vf); + // caps: + unsigned int default_caps; // used by default query_format() + unsigned int default_reqs; // used by default config() + // data: + vf_image_context_t imgctx; + vf_stream_t* parent; + vf_instance_t* next; + vf_instance_t* prev; + mp_image_t *dmpi; + vf_priv_t* priv; + /* configuration for outgoing stream */ + vf_conf_t conf; + /* event handler*/ + any_t* libinput; +}__attribute__ ((packed)); + +// control codes: +#include "mpc_info.h" + +// functions: + +vf_instance_t* __FASTCALL__ vf_init_filter(any_t* libinput,const vf_conf_t* conf); +vf_instance_t* __FASTCALL__ vf_reinit_vo(vf_instance_t* first,unsigned w,unsigned h,unsigned fmt,int reset_cache); + +void __FASTCALL__ vf_mpi_clear(mp_image_t* mpi,int x0,int y0,int w,int h); +mp_image_t* __FASTCALL__ vf_get_new_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype, int mp_imgflag, int w, int h,unsigned idx); +mp_image_t* __FASTCALL__ vf_get_new_genome(vf_instance_t* vf, const mp_image_t* mpi); +mp_image_t* __FASTCALL__ vf_get_new_exportable_genome(vf_instance_t* vf, int mp_imgtype, int mp_imgflag, const mp_image_t* mpi); +mp_image_t* __FASTCALL__ vf_get_new_temp_genome(vf_instance_t* vf, const mp_image_t* mpi); +int __FASTCALL__ vf_query_format(vf_instance_t* vf, unsigned int fmt,unsigned width,unsigned height); + +vf_instance_t* __FASTCALL__ vf_open_filter(vf_instance_t* next,const char *name,const char *args,any_t*libinput,const vf_conf_t* conf); +vf_instance_t* __FASTCALL__ vf_open_encoder(vf_instance_t* next,const char *name,const char *args); + +unsigned int __FASTCALL__ vf_match_csp(vf_instance_t** vfp,unsigned int* list,const vf_conf_t* conf); +void __FASTCALL__ vf_clone_mpi_attributes(mp_image_t* dst, mp_image_t* src); + +// default wrappers: +int __FASTCALL__ vf_next_config(vf_instance_t* vf, + int width, int height, int d_width, int d_height, + vo_flags_e flags, unsigned int outfmt); +MPXP_Rc __FASTCALL__ vf_next_control(vf_instance_t* vf, int request, any_t* data); +int __FASTCALL__ vf_next_query_format(vf_instance_t* vf, unsigned int fmt,unsigned w,unsigned h); +int __FASTCALL__ vf_next_put_slice(vf_instance_t* vf,mp_image_t *mpi); + +vf_instance_t* __FASTCALL__ append_filters(vf_instance_t* last); + +/* returns ANDed flags of whole chain */ +unsigned __FASTCALL__ vf_query_flags(vf_instance_t*vfi); + +void __FASTCALL__ vf_uninit_filter(vf_instance_t* vf); +void __FASTCALL__ vf_uninit_filter_chain(vf_instance_t* vf); +void __FASTCALL__ vf_showlist(vf_instance_t* vf); + +vf_instance_t* __FASTCALL__ vf_first(const vf_instance_t*); +vf_instance_t* __FASTCALL__ vf_last(const vf_instance_t*); + +#endif Modified: mplayerxp/postproc/vf_menu.cpp =================================================================== --- mplayerxp/postproc/vf_menu.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_menu.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -13,6 +13,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "libvo/video_out.h" Modified: mplayerxp/postproc/vf_mirror.cpp =================================================================== --- mplayerxp/postproc/vf_mirror.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_mirror.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "postproc/swscale.h" Modified: mplayerxp/postproc/vf_noise.cpp =================================================================== --- mplayerxp/postproc/vf_noise.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_noise.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -30,6 +30,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" @@ -463,7 +464,8 @@ } // check csp: - vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,IMGFMT_YV12,1,1); + vf_conf_t conf = { 1, 1, IMGFMT_YV12 }; + vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,&conf); if(!vf->priv->outfmt) { uninit(vf); return MPXP_False; // no csp match :( Modified: mplayerxp/postproc/vf_null.cpp =================================================================== --- mplayerxp/postproc/vf_null.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_null.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -2,6 +2,7 @@ #include "osdep/mplib.h" using namespace mpxp; #include "vf.h" +#include "vf_internal.h" static MPXP_Rc __FASTCALL__ vf_open(vf_instance_t *vf,const char* args){ return MPXP_False; Modified: mplayerxp/postproc/vf_ow.cpp =================================================================== --- mplayerxp/postproc/vf_ow.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_ow.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -36,6 +36,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "pp_msg.h" //===========================================================================// Modified: mplayerxp/postproc/vf_palette.cpp =================================================================== --- mplayerxp/postproc/vf_palette.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_palette.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "postproc/swscale.h" #include "pp_msg.h" Modified: mplayerxp/postproc/vf_panscan.cpp =================================================================== --- mplayerxp/postproc/vf_panscan.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_panscan.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -12,6 +12,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" Modified: mplayerxp/postproc/vf_perspective.cpp =================================================================== --- mplayerxp/postproc/vf_perspective.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_perspective.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -29,6 +29,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" Modified: mplayerxp/postproc/vf_pp.cpp =================================================================== --- mplayerxp/postproc/vf_pp.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_pp.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -12,6 +12,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "postprocess.h" #include "pp_msg.h" @@ -152,7 +153,8 @@ vf->priv->context=NULL; // check csp: - vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,IMGFMT_YV12,1,1); + vf_conf_t conf = { 1, 1, IMGFMT_YV12 }; + vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,&conf); if(!vf->priv->outfmt) return MPXP_False; // no csp match :( if(args){ Modified: mplayerxp/postproc/vf_raw.cpp =================================================================== --- mplayerxp/postproc/vf_raw.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_raw.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -13,6 +13,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "postproc/swscale.h" Modified: mplayerxp/postproc/vf_rectangle.cpp =================================================================== --- mplayerxp/postproc/vf_rectangle.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_rectangle.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -6,6 +6,7 @@ #include <string.h> #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" Modified: mplayerxp/postproc/vf_rgb2bgr.cpp =================================================================== --- mplayerxp/postproc/vf_rgb2bgr.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_rgb2bgr.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "mp_conf_lavc.h" Modified: mplayerxp/postproc/vf_rotate.cpp =================================================================== --- mplayerxp/postproc/vf_rotate.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_rotate.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -9,6 +9,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "postproc/swscale.h" Modified: mplayerxp/postproc/vf_scale.cpp =================================================================== --- mplayerxp/postproc/vf_scale.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_scale.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -11,6 +11,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "libvo/video_out.h" #include "osdep/fastmemcpy.h" Modified: mplayerxp/postproc/vf_smartblur.cpp =================================================================== --- mplayerxp/postproc/vf_smartblur.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_smartblur.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -32,6 +32,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "postproc/swscale.h" #include "vf_scale.h" Modified: mplayerxp/postproc/vf_softpulldown.cpp =================================================================== --- mplayerxp/postproc/vf_softpulldown.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_softpulldown.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -8,6 +8,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "libvo/sub.h" Modified: mplayerxp/postproc/vf_swapuv.cpp =================================================================== --- mplayerxp/postproc/vf_swapuv.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_swapuv.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -28,6 +28,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" //===========================================================================// Modified: mplayerxp/postproc/vf_test.cpp =================================================================== --- mplayerxp/postproc/vf_test.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_test.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -28,6 +28,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "swscale.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" Modified: mplayerxp/postproc/vf_unsharp.cpp =================================================================== --- mplayerxp/postproc/vf_unsharp.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_unsharp.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -36,6 +36,7 @@ #include "libvo/img_format.h" #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "osdep/fastmemcpy.h" #include "pp_msg.h" @@ -348,7 +349,8 @@ } // check csp: - vf->priv->outfmt = vf_match_csp( &vf->next, fmt_list, IMGFMT_YV12,1,1 ); + vf_conf_t conf = { 1, 1, IMGFMT_YV12 }; + vf->priv->outfmt = vf_match_csp( &vf->next, fmt_list,&conf); if( !vf->priv->outfmt ) { uninit( vf ); return MPXP_False; // no csp match :( Modified: mplayerxp/postproc/vf_vo.cpp =================================================================== --- mplayerxp/postproc/vf_vo.cpp 2012-12-02 07:38:22 UTC (rev 497) +++ mplayerxp/postproc/vf_vo.cpp 2012-12-02 11:56:31 UTC (rev 498) @@ -7,6 +7,7 @@ #include "xmpcore/mp_image.h" #include "vf.h" +#include "vf_internal.h" #include "vfcap.h" #include "libvo/video_out.h" #include "libvo/dri_vo.h" @@ -50,9 +51,9 @@ return 0; } - vf->dw=width; - vf->dh=height; - vf->dfourcc=outfmt; + vf->conf.w=widt... [truncated message content] |
From: <nic...@us...> - 2012-12-04 08:18:17
|
Revision: 503 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=503&view=rev Author: nickols_k Date: 2012-12-04 08:18:06 +0000 (Tue, 04 Dec 2012) Log Message: ----------- demux_avi works fine without demux_ogg with OggS Modified Paths: -------------- mplayerxp/libmpcodecs/dec_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_ogg.cpp Modified: mplayerxp/libmpcodecs/dec_audio.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_audio.cpp 2012-12-04 08:02:46 UTC (rev 502) +++ mplayerxp/libmpcodecs/dec_audio.cpp 2012-12-04 08:18:06 UTC (rev 503) @@ -73,7 +73,7 @@ strcpy(sh_audio->codec->driver_name,aprobe->driver); strcpy(sh_audio->codec->codec_name,sh_audio->codec->dll_name); memcpy(sh_audio->codec->outfmt,aprobe->sample_fmt,sizeof(aprobe->sample_fmt)); - } + } else return NULL; priv->mpadec=afm_find_driver(afm); if(!priv->mpadec){ Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-04 08:02:46 UTC (rev 502) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-04 08:18:06 UTC (rev 503) @@ -1129,7 +1129,6 @@ } int index_mode=-1; // -1=untouched 0=don't use index 1=use (geneate) index -extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer); extern demuxer_driver_t demux_ogg; static demuxer_t* avi_open(demuxer_t* demuxer){ Demuxer_Stream *d_audio=demuxer->audio; @@ -1281,31 +1280,6 @@ sh_video->bih->biHeight, sh_video->bih->biBitCount, sh_video->fps); - { - sh_audio_t* sh_a; - sh_a = (sh_audio_t*)demuxer->audio->sh; -#ifdef HAVE_LIBVORBIS - if(demuxer->audio->id != -2 && sh_a) { - /* support for Ogg-in-AVI: */ - if(sh_a->wtag == mmioFOURCC('v','r','b','s')) - demuxer = init_avi_with_ogg(demuxer); - else if(sh_a->wtag == 0x674F) { - stream_t* s; - demuxer_t *od; - s = new_ds_stream(demuxer->audio); - od = new_demuxer(s,-1,-2,-2); - od->file_format=DEMUXER_TYPE_OGG; - demux_ogg.probe(od); - if(!demux_ogg.open(od)) { - MSG_ERR("Can't open OGG demuxer\n"); - free_stream(s); - demuxer->audio->id = -2; - } else - demuxer = new_demuxers_demuxer(demuxer,od,demuxer); - } - } -#endif - } check_pin("demuxer",demuxer->pin,DEMUX_PIN); return demuxer; } Modified: mplayerxp/libmpdemux/demux_ogg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-04 08:02:46 UTC (rev 502) +++ mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-04 08:18:06 UTC (rev 503) @@ -1181,99 +1181,6 @@ } -/// For avi with Ogg audio stream we have to create an ogg demuxer for this -// stream, then we join the avi and ogg demuxer with a demuxers demuxer -demuxer_t* init_avi_with_ogg(demuxer_t* demuxer) { - demuxer_t *od; - ogg_demuxer_t *ogg_d; - stream_t* s; - uint32_t hdrsizes[3]; - Demuxer_Packet *dp; - sh_audio_t *sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); - int np; - unsigned char *p = NULL,*buf; - int plen; - - /// Check that the cbSize is enouth big for the following reads - if(sh_audio->wf->cbSize < 22+3*sizeof(uint32_t)) { - MSG_ERR("AVI Ogg : Initial audio header is too small !!!!!\n"); - goto fallback; - } - /// Get the size of the 3 header packet - memcpy(hdrsizes, ((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX), 3*sizeof(uint32_t)); -// printf("\n!!!!!! hdr sizes: %d %d %d \n",hdrsizes[0],hdrsizes[1],hdrsizes[2]); - - /// Check the size - if(sh_audio->wf->cbSize < 22+3*sizeof(uint32_t)+hdrsizes[0]+hdrsizes[1] + hdrsizes[2]) { - MSG_ERR("AVI Ogg : Audio header is too small !!!!!\n"); - goto fallback; - } - - // Build the ogg demuxer private datas - ogg_d = new(zeromem) ogg_demuxer_t; - ogg_d->num_sub = 1; - ogg_d->subs = new(zeromem) ogg_stream_t; - ogg_d->subs[0].vorbis = 1; - - // Init the ogg physical stream - ogg_sync_init(&ogg_d->sync); - - // Get the first page of the stream : we assume there only 1 logical stream - while((np = ogg_sync_pageout(&ogg_d->sync,&ogg_d->page)) <= 0 ) { - if(np < 0) { - MSG_ERR("AVI Ogg error : Can't init using first stream packets\n"); - delete ogg_d; - goto fallback; - } - // Add some data - plen = demuxer->audio->get_packet(&p); - buf = (unsigned char *)ogg_sync_buffer(&ogg_d->sync,plen); - memcpy(buf,p,plen); - ogg_sync_wrote(&ogg_d->sync,plen); - } - // Init the logical stream - MSG_DBG2("AVI Ogg found page with serial %d\n",ogg_page_serialno(&ogg_d->page)); - ogg_stream_init(&ogg_d->subs[0].stream,ogg_page_serialno(&ogg_d->page)); - // Write the page - ogg_stream_pagein(&ogg_d->subs[0].stream,&ogg_d->page); - - // Create the ds_stream and the ogg demuxer - s = new_ds_stream(demuxer->audio); - od = new_demuxer(s,0,-2,-2); - od->file_format=DEMUXER_TYPE_OGG; - - /// Add the header packets in the ogg demuxer audio stream - // Initial header - dp = new(zeromem) Demuxer_Packet(hdrsizes[0]); - memcpy(dp->buffer(),((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t),hdrsizes[0]); - od->audio->add_packet(dp); - /// Comments - dp = new(zeromem) Demuxer_Packet(hdrsizes[1]); - memcpy(dp->buffer(),((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t)+hdrsizes[0],hdrsizes[1]); - od->audio->add_packet(dp); - /// Code book - dp = new(zeromem) Demuxer_Packet(hdrsizes[2]); - memcpy(dp->buffer(),((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t)+hdrsizes[0]+hdrsizes[1],hdrsizes[2]); - od->audio->add_packet(dp); - - // Finish setting up the ogg demuxer - od->priv = ogg_d; - sh_audio = new_sh_audio(od,0); - od->audio->id = 0; - od->video->id = -2; - od->audio->sh = sh_audio; - sh_audio->ds = od->audio; - sh_audio->wtag = FOURCC_VORBIS; - - /// Return the joined demuxers - return new_demuxers_demuxer(demuxer,od,demuxer); - - fallback: - demuxer->audio->id = -2; - return demuxer; - -} - static void ogg_seek(demuxer_t *demuxer,const seek_args_t* seeka) { ogg_demuxer_t* ogg_d = static_cast<ogg_demuxer_t*>(demuxer->priv); ogg_sync_state* sync = &ogg_d->sync; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-04 12:36:09
|
Revision: 506 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=506&view=rev Author: nickols_k Date: 2012-12-04 12:35:59 +0000 (Tue, 04 Dec 2012) Log Message: ----------- move xp_core into MPXPContext Modified Paths: -------------- mplayerxp/libao2/ao_wav.cpp mplayerxp/libmpcodecs/dec_audio.cpp mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpdemux/demuxer_r.cpp mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpsub/spudec.cpp mplayerxp/libvo/sub.cpp mplayerxp/libvo/video_out.cpp mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/postproc/vf.cpp mplayerxp/xmpcore/sig_hand.cpp mplayerxp/xmpcore/sig_hand.h mplayerxp/xmpcore/xmp_adecoder.cpp mplayerxp/xmpcore/xmp_aplayer.cpp mplayerxp/xmpcore/xmp_core.cpp mplayerxp/xmpcore/xmp_core.h mplayerxp/xmpcore/xmp_vdecoder.cpp mplayerxp/xmpcore/xmp_vplayer.cpp Modified: mplayerxp/libao2/ao_wav.cpp =================================================================== --- mplayerxp/libao2/ao_wav.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libao2/ao_wav.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -222,7 +222,7 @@ // return: how many bytes can be played without blocking static unsigned get_space(const ao_data_t* ao){ priv_t* priv=reinterpret_cast<priv_t*>(ao->priv); - float pts=dae_played_frame(xp_core->video).v_pts; + float pts=dae_played_frame(mpxp_context().engine().xp_core->video).v_pts; if(pts) return ao->pts < pts + priv->fast * 30000 ? ao->outburst : 0; return ao->outburst; Modified: mplayerxp/libmpcodecs/dec_audio.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_audio.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libmpcodecs/dec_audio.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -154,9 +154,9 @@ warned=1; MSG_WARN(MSGTR_CODEC_INITAL_AV_RESYNC); } - } else if(xp_core->initial_apts_corr.need_correction==1) { - xp_core->initial_apts += ((float)(xp_core->initial_apts_corr.pts_bytes-xp_core->initial_apts_corr.nbytes))/(float)sh_audio->i_bps; - xp_core->initial_apts_corr.need_correction=0; + } else if(mpxp_context().engine().xp_core->initial_apts_corr.need_correction==1) { + mpxp_context().engine().xp_core->initial_apts += ((float)(mpxp_context().engine().xp_core->initial_apts_corr.pts_bytes-mpxp_context().engine().xp_core->initial_apts_corr.nbytes))/(float)sh_audio->i_bps; + mpxp_context().engine().xp_core->initial_apts_corr.need_correction=0; } MSG_OK("[AC] %s decoder: [%s] drv:%s.%s ratio %i->%i\n",mp_conf.audio_codec?"Forcing":"Selecting" ,ac Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -358,7 +358,7 @@ if(frame->flags) return 0; update_subtitle(opaque,frame->pts,mpi->xp_idx); - mpxp_context().video().output->flush_page(dae_curr_vdecoded(xp_core)); + mpxp_context().video().output->flush_page(dae_curr_vdecoded(mpxp_context().engine().xp_core)); t2=GetTimer()-t2; tt=t2*0.000001f; @@ -628,7 +628,7 @@ sh_video_t* sh = priv->parent; vf_stream_t* s = priv->vfilter; // MSG_DBG2("mpcodecs_get_image(vf_%s,%i,%i,%i,%i) was called\n",((vf_instance_t *)(sh->vfilter))->info->name,mp_imgtype,mp_imgflag,w,h); - mp_image_t* mpi=vf_get_new_image(s,sh->codec->outfmt[sh->outfmtidx],mp_imgtype,mp_imgflag,w,h,dae_curr_vdecoded(xp_core)); + mp_image_t* mpi=vf_get_new_image(s,sh->codec->outfmt[sh->outfmtidx],mp_imgtype,mp_imgflag,w,h,dae_curr_vdecoded(mpxp_context().engine().xp_core)); mpi->x=mpi->y=0; if(mpi->xp_idx==XP_IDX_INVALID) MSG_V("[mpcodecs_get_image] Incorrect mpi->xp_idx. Be ready for segfault!\n"); Modified: mplayerxp/libmpdemux/demuxer_r.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -38,7 +38,7 @@ { float retval; demuxer_t*demuxer=ds->demuxer; - xp_core->initial_apts_corr.need_correction=0; + mpxp_context().engine().xp_core->initial_apts_corr.need_correction=0; MSG_DBG2("initial_apts from: stream_pts=%f pts_bytes=%u got_bytes=%u i_bps=%u\n" ,ds->pts,ds->tell_pts(),nbytes,((sh_audio_t*)ds->demuxer->audio->sh)->i_bps); /* FIXUP AUDIO PTS*/ @@ -64,9 +64,9 @@ retval = ds->pts+ds->pts_corr+((float)(ds->tell_pts()-nbytes))/(float)(((sh_audio_t*)ds->demuxer->audio->sh)->i_bps); else { - xp_core->initial_apts_corr.need_correction=1; - xp_core->initial_apts_corr.pts_bytes=ds->tell_pts(); - xp_core->initial_apts_corr.nbytes=nbytes; + mpxp_context().engine().xp_core->initial_apts_corr.need_correction=1; + mpxp_context().engine().xp_core->initial_apts_corr.pts_bytes=ds->tell_pts(); + mpxp_context().engine().xp_core->initial_apts_corr.nbytes=nbytes; retval = ds->pts; } MSG_DBG2("initial_apts is: %f\n",retval); @@ -83,7 +83,7 @@ if(mp_conf.benchmark) t=GetTimer(); retval = ds->getch(); *pts=get_ds_stream_pts(ds,1); - if(xp_core->initial_apts == HUGE) xp_core->initial_apts=*pts; + if(mpxp_context().engine().xp_core->initial_apts == HUGE) mpxp_context().engine().xp_core->initial_apts=*pts; if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; @@ -134,7 +134,7 @@ if(mp_conf.benchmark) t=GetTimer(); retval = ds->read_data(mem,len); *pts=get_ds_stream_pts(ds,retval); - if(xp_core->initial_apts == HUGE) xp_core->initial_apts=*pts; + if(mpxp_context().engine().xp_core->initial_apts == HUGE) mpxp_context().engine().xp_core->initial_apts=*pts; if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; @@ -158,7 +158,7 @@ if(mp_conf.benchmark) t=GetTimer(); retval = ds->get_packet(start); *pts=get_ds_stream_pts(ds,retval); - if(xp_core->initial_apts == HUGE) xp_core->initial_apts=*pts; + if(mpxp_context().engine().xp_core->initial_apts == HUGE) mpxp_context().engine().xp_core->initial_apts=*pts; if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -286,7 +286,7 @@ unsigned rc; if((rc=xmp_register_thread(NULL,sig_cache2,cache2_routine,"cache2"))==UINT_MAX) return 0; - c->pth=xp_core->mpxp_threads[rc]; + c->pth=mpxp_context().engine().xp_core->mpxp_threads[rc]; // wait until cache is filled at least prefill_init % MSG_V("CACHE_PRE_INIT: %lld [%lld] %lld pre:%d eof:%d SS=%u \n", START_FILEPOS(c),c->read_filepos,END_FILEPOS(c),_min,c->eof,ss); Modified: mplayerxp/libmpsub/spudec.cpp =================================================================== --- mplayerxp/libmpsub/spudec.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libmpsub/spudec.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -611,7 +611,7 @@ spudec_handle_t *spu = (spudec_handle_t *)self; if (spu->start_pts <= spu->now_pts && spu->now_pts < spu->end_pts && spu->image) { - draw_alpha(vo,dae_curr_vdecoded(xp_core),spu->start_col, spu->start_row, spu->width, spu->height, + draw_alpha(vo,dae_curr_vdecoded(mpxp_context().engine().xp_core),spu->start_col, spu->start_row, spu->width, spu->height, spu->image, spu->aimage, spu->stride); spu->spu_changed = 0; } @@ -767,7 +767,7 @@ || (spu->orig_frame_width == dxs && spu->orig_frame_height == dys))) { if (spu->image) { - draw_alpha(vo,dae_curr_vdecoded(xp_core),spu->start_col, spu->start_row, spu->width, spu->height, + draw_alpha(vo,dae_curr_vdecoded(mpxp_context().engine().xp_core),spu->start_col, spu->start_row, spu->width, spu->height, spu->image, spu->aimage, spu->stride); spu->spu_changed = 0; } @@ -1073,7 +1073,7 @@ if ((int)(spu->scaled_start_row) < 0) spu->scaled_start_row = 0; break; } - draw_alpha(vo,dae_curr_vdecoded(xp_core),spu->scaled_start_col, spu->scaled_start_row, spu->scaled_width, spu->scaled_height, + draw_alpha(vo,dae_curr_vdecoded(mpxp_context().engine().xp_core),spu->scaled_start_col, spu->scaled_start_row, spu->scaled_width, spu->scaled_height, spu->scaled_image, spu->scaled_aimage, spu->scaled_stride); spu->spu_changed = 0; } Modified: mplayerxp/libvo/sub.cpp =================================================================== --- mplayerxp/libvo/sub.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libvo/sub.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -518,7 +518,7 @@ // obj->flags&=~OSDFLAG_OLD_BBOX; if(obj->cleared_frames>=0) { obj->cleared_frames++; - if(obj->cleared_frames>=xp_core->num_v_buffs) + if(obj->cleared_frames>=mpxp_context().engine().xp_core->num_v_buffs) obj->cleared_frames=-1; // All cleared stop } } Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/libvo/video_out.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -305,7 +305,7 @@ dri_tune(priv.image_width,priv.image_height); /* TODO: smart analizer of scaling possibilities of vo_driver */ if(is_resize) { - xp_core->in_resize=1; + mpxp_context().engine().xp_core->in_resize=1; vf_reinit_vo(priv.parent,priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,1); } vf_reinit_vo(priv.parent,priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,0); Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/mplayerxp.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -236,7 +236,7 @@ MP_Config mp_conf; MPXPContext::MPXPContext() - :MPXPSys(*new(zeromem)MPXPSystem), + :_engine(new(zeromem) mpxp_engine_t), _audio(new(zeromem) audio_processing_t), _video(new(zeromem) video_processing_t) { @@ -244,17 +244,17 @@ bench=new(zeromem) time_usage_t; use_pts_fix2=-1; rtc_fd=-1; + _engine->MPXPSys = new(zeromem) MPXPSystem; } MPXPContext::~MPXPContext() { - delete &MPXPSys; + delete _engine->MPXPSys; delete bench; } static volatile char antiviral_hole2[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; static LocalPtr<MPXPContext> MPXPCtx(new(zeromem) MPXPContext); -xp_core_t* xp_core=NULL; static volatile char antiviral_hole3[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; volatile MPXPSecureKeys* secure_keys; /************************************************************************** @@ -424,7 +424,7 @@ fflush(stdout); fflush(stderr); - mpxp_context().MPXPSys.uninit_player(INITED_ALL); + mpxp_context().engine().MPXPSys->uninit_player(INITED_ALL); MP_UNIT("exit_player"); @@ -640,7 +640,7 @@ } void show_long_help(void) { - MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; m_config_show_options(mpxp_context().mconfig); mp_input_print_binds(MPXPSys.libinput()); print_stream_drivers(); @@ -669,7 +669,7 @@ //================= Update OSD ==================== void update_osd( float v_pts ) { - MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; static char osd_text_buffer[64]; static int osd_last_pts=-303; //================= Update OSD ==================== @@ -713,7 +713,7 @@ sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); Demuxer_Stream *d_dvdsub=_demuxer->sub; int seek_rval=1; - xp_core->audio->eof=0; + mpxp_context().engine().xp_core->audio->eof=0; if(_seek->secs || _seek->flags&DEMUX_SEEK_SET) { seek_rval=demux_seek_r(_demuxer,_seek); mpxp_context().mpxp_after_seek=25; /* 1 sec delay */ @@ -774,12 +774,12 @@ } } - if(sh_video) dae_wait_decoder_outrun(xp_core->video); + if(sh_video) dae_wait_decoder_outrun(mpxp_context().engine().xp_core->video); } void mpxp_reset_vcache(void) { - MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(MPXPSys.demuxer()->video->sh); seek_args_t _seek = { 0, DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS }; if(sh_video) MPXPSys.seek(NULL,&_seek); @@ -832,14 +832,14 @@ 100.0*mpxp_context().bench->demux/total_time_usage, 100.0*mpxp_context().bench->c2/total_time_usage, 100.0*tot/total_time_usage); - unsigned nframes=xp_core->video->num_played_frames; + unsigned nframes=mpxp_context().engine().xp_core->video->num_played_frames; MSG_INFO("\nREAL RESULTS: from %u was dropped=%u\n" - ,nframes,xp_core->video->num_dropped_frames); + ,nframes,mpxp_context().engine().xp_core->video->num_dropped_frames); } static void show_benchmark_status(void) { - MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(MPXPSys.demuxer()->audio->sh); if(xmp_test_model(XMP_Run_AudioPlayback)) MSG_STATUS("A:%6.1f %4.1f%%\r" @@ -868,7 +868,7 @@ } void mplayer_put_key(int code){ - MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; mp_cmd_t* cmd; cmd=mp_input_get_cmd_from_keys(MPXPSys.libinput(),1,&code); mp_input_queue_cmd(MPXPSys.libinput(),cmd); @@ -1310,18 +1310,18 @@ sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); MP_UNIT("init_xp"); - if(sh_video && xp_core->num_v_buffs < 3) {/* we need at least 3 buffers to suppress screen judering */ - MSG_FATAL("Not enough buffers for DECODING AHEAD!\nNeed %u buffers but exist only %u\n",3,xp_core->num_v_buffs); + if(sh_video && mpxp_context().engine().xp_core->num_v_buffs < 3) {/* we need at least 3 buffers to suppress screen judering */ + MSG_FATAL("Not enough buffers for DECODING AHEAD!\nNeed %u buffers but exist only %u\n",3,mpxp_context().engine().xp_core->num_v_buffs); exit_player("Try other '-vo' driver.\n"); } if(xmp_init_engine(sh_video,sh_audio)!=0) exit_player("Can't initialize decoding ahead!\n"); if(xmp_run_decoders()!=0) exit_player("Can't run decoding ahead!\n"); - if(sh_video) MSG_OK("Using DECODING AHEAD mplayer's core with %u video buffers\n",xp_core->num_v_buffs); - else MSG_OK("Using DECODING AHEAD mplayer's core with %u audio buffers\n",xp_core->num_a_buffs); + if(sh_video) MSG_OK("Using DECODING AHEAD mplayer's core with %u video buffers\n",mpxp_context().engine().xp_core->num_v_buffs); + else MSG_OK("Using DECODING AHEAD mplayer's core with %u audio buffers\n",mpxp_context().engine().xp_core->num_a_buffs); /* reset counters */ - if(sh_video) xp_core->video->num_dropped_frames=0; + if(sh_video) mpxp_context().engine().xp_core->video->num_dropped_frames=0; inited_flags|=INITED_XMP; } @@ -1387,7 +1387,7 @@ if (ao_inited==MPXP_Ok && sh_audio) { if(xmp_test_model(XMP_Run_AudioPlayer)) { - xp_core->in_pause=1; + mpxp_context().engine().xp_core->in_pause=1; while( !dec_ahead_can_aseek ) yield_timeslice(); } ao_pause(mpxp_context().audio().output); // pause audio, keep data if possible @@ -1407,7 +1407,7 @@ if (ao_inited==MPXP_Ok && sh_audio) { ao_resume(mpxp_context().audio().output); // resume audio if(xmp_test_model(XMP_Run_AudioPlayer)) { - xp_core->in_pause=0; + mpxp_context().engine().xp_core->in_pause=0; __MP_SYNCHRONIZE(audio_play_mutex,pthread_cond_signal(&audio_play_cond)); } } @@ -1443,7 +1443,7 @@ i_abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; if(i_abs) { _seek->flags = DEMUX_SEEK_SET|DEMUX_SEEK_PERCENTS; - if(sh_video) osd_function= (v > dae_played_frame(xp_core->video).v_pts) ? OSD_FFW : OSD_REW; + if(sh_video) osd_function= (v > dae_played_frame(mpxp_context().engine().xp_core->video).v_pts) ? OSD_FFW : OSD_REW; _seek->secs = v/100.; } else { _seek->flags = DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS; @@ -1625,7 +1625,7 @@ mpxp_context().video().output->fullscreen(); break; case MP_CMD_VO_SCREENSHOT: - mpxp_context().video().output->screenshot(dae_curr_vplayed(xp_core)); + mpxp_context().video().output->screenshot(dae_curr_vplayed(mpxp_context().engine().xp_core)); break; case MP_CMD_SUB_POS: { int v; @@ -1694,7 +1694,7 @@ secure_keys=ptr_protector.protect(new MPXPSecureKeys(10)); mpxp_init_structs(); - MPXPSystem& MPXPSys=mpxp_context().MPXPSys; + MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; mpxp_context().video().output=new(zeromem) Video_Output; init_signal_handling(); @@ -1752,7 +1752,7 @@ } } - xp_core->num_a_buffs = vo_conf.xp_buffs; + mpxp_context().engine().xp_core->num_a_buffs = vo_conf.xp_buffs; init_player(); @@ -1834,7 +1834,7 @@ //============ Open MPXPSys.demuxer()S --- DETECT file type ======================= if(mp_conf.playbackspeed_factor!=1.0) mp_conf.has_audio=0; - xp_core->initial_apts=HUGE; + mpxp_context().engine().xp_core->initial_apts=HUGE; if(!mp_conf.has_audio) mp_conf.audio_id=-2; // do NOT read audio packets... if(!mp_conf.has_video) mp_conf.video_id=-2; // do NOT read video packets... if(!mp_conf.has_dvdsub) mp_conf.dvdsub_id=-2;// do NOT read subtitle packets... @@ -1921,7 +1921,7 @@ goto main; } - xp_core->num_v_buffs=mpxp_context().video().output->get_num_frames(); /* that really known after init_vcodecs */ + mpxp_context().engine().xp_core->num_v_buffs=mpxp_context().video().output->get_num_frames(); /* that really known after init_vcodecs */ if(mp_conf.autoq>0){ /* Auto quality option enabled*/ @@ -2016,19 +2016,19 @@ */ mpxp_context().seek_time = GetTimerMS(); - if(sh_video) dae_wait_decoder_outrun(xp_core->video); + if(sh_video) dae_wait_decoder_outrun(mpxp_context().engine().xp_core->video); // TODO: rewrite test backtrace in .asm // mpxp_test_backtrace(); if(xmp_run_players()!=0) exit_player("Can't run xp players!\n"); - MSG_OK("Using the next %i threads:\n",xp_core->num_threads); + MSG_OK("Using the next %i threads:\n",mpxp_context().engine().xp_core->num_threads); unsigned idx; - for(idx=0;idx<xp_core->num_threads;idx++) + for(idx=0;idx<mpxp_context().engine().xp_core->num_threads;idx++) MSG_OK("[%i] %s (id=%u, pth_id=%lu)\n" ,idx - ,xp_core->mpxp_threads[idx]->name - ,xp_core->mpxp_threads[idx]->pid - ,xp_core->mpxp_threads[idx]->pth_id); + ,mpxp_context().engine().xp_core->mpxp_threads[idx]->name + ,mpxp_context().engine().xp_core->mpxp_threads[idx]->pid + ,mpxp_context().engine().xp_core->mpxp_threads[idx]->pth_id); //==================== START PLAYING ======================= @@ -2038,11 +2038,11 @@ while(!eof){ int in_pause=0; - eof |= xp_core->audio->eof; + eof |= mpxp_context().engine().xp_core->audio->eof; /*========================== UPDATE TIMERS ============================*/ MP_UNIT("Update timers"); - if(sh_audio) eof = xp_core->audio->eof; - if(sh_video) eof|=dae_played_eof(xp_core->video); + if(sh_audio) eof = mpxp_context().engine().xp_core->audio->eof; + if(sh_video) eof|=dae_played_eof(mpxp_context().engine().xp_core->video); if(!sh_video) { if(mp_conf.benchmark && mp_conf.verbose) show_benchmark_status(); else MPXPSys.print_audio_status(); @@ -2078,7 +2078,7 @@ if(mp_conf.loop_times==1) mp_conf.loop_times=-1; eof=0; - xp_core->audio->eof=0; + mpxp_context().engine().xp_core->audio->eof=0; seek_args.flags=DEMUX_SEEK_SET|DEMUX_SEEK_PERCENTS; seek_args.secs=0; // seek to start of movie (0%) } @@ -2089,14 +2089,14 @@ xmp_halt_threads(0); if(seek_args.secs && sh_video) { - xmp_frame_t shvap = dae_played_frame(xp_core->video); - xmp_frame_t shvad = dae_prev_decoded_frame(xp_core->video); - seek_args.secs -= (xp_core->bad_pts?shvad.v_pts:d_video->pts)-shvap.v_pts; + xmp_frame_t shvap = dae_played_frame(mpxp_context().engine().xp_core->video); + xmp_frame_t shvad = dae_prev_decoded_frame(mpxp_context().engine().xp_core->video); + seek_args.secs -= (mpxp_context().engine().xp_core->bad_pts?shvad.v_pts:d_video->pts)-shvap.v_pts; } MPXPSys.seek(&osd,&seek_args); - xp_core->audio->eof=0; + mpxp_context().engine().xp_core->audio->eof=0; seek_args.secs=0; seek_args.flags=DEMUX_SEEK_CUR|DEMUX_SEEK_SECONDS; @@ -2162,7 +2162,7 @@ MPXPSys.vo_inited=0; MPXPSys.ao_inited=MPXP_False; eof = 0; - xp_core->audio->eof=0; + mpxp_context().engine().xp_core->audio->eof=0; goto play_next_file; } Modified: mplayerxp/mplayerxp.h =================================================================== --- mplayerxp/mplayerxp.h 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/mplayerxp.h 2012-12-04 12:35:59 UTC (rev 506) @@ -123,6 +123,13 @@ double total_start; }time_usage_t; + struct MPXPSystem; + struct xp_core_t; + struct mpxp_engine_t { + MPXPSystem* MPXPSys; + xp_core_t* xp_core; + }; + struct audio_processing_t { audio_decoder_t* decoder; ao_data_t* output; @@ -133,13 +140,13 @@ Video_Output* output; }; - struct MPXPSystem; /* non-configurable through command line stuff */ struct MPXPContext :public Opaque { public: MPXPContext(); virtual ~MPXPContext(); + virtual mpxp_engine_t& engine() const { return *_engine; } virtual audio_processing_t& audio() const { return *_audio; } virtual video_processing_t& video() const { return *_video; } @@ -152,9 +159,9 @@ subtitle* subtitles; m_config_t* mconfig; time_usage_t* bench; - MPXPSystem& MPXPSys; any_t* msg_priv; private: + LocalPtr<mpxp_engine_t> _engine; LocalPtr<audio_processing_t> _audio; LocalPtr<video_processing_t> _video; }; Modified: mplayerxp/postproc/vf.cpp =================================================================== --- mplayerxp/postproc/vf.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/postproc/vf.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -240,7 +240,7 @@ } // if !DIRECT } else { MSG_DBG2("vf_get_new_image forces xp_idx retrieving\n"); - mpi->xp_idx=dae_curr_vdecoded(xp_core); + mpi->xp_idx=dae_curr_vdecoded(mpxp_context().engine().xp_core); mpi->flags&=~MP_IMGFLAG_ALLOCATED; } if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK && vf->start_slice) Modified: mplayerxp/xmpcore/sig_hand.cpp =================================================================== --- mplayerxp/xmpcore/sig_hand.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/sig_hand.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -36,18 +36,18 @@ { int i; pthread_t _self = pthread_self(); - for(i=0; i < xp_core->num_threads && !pthread_equal(xp_core->mpxp_threads[i]->pth_id, _self); i++); - if(i >= xp_core->num_threads || - !pthread_equal(xp_core->mpxp_threads[i]->pth_id, _self)) i = 0; /* Use 0 as default handler */ + for(i=0; i < mpxp_context().engine().xp_core->num_threads && !pthread_equal(mpxp_context().engine().xp_core->mpxp_threads[i]->pth_id, _self); i++); + if(i >= mpxp_context().engine().xp_core->num_threads || + !pthread_equal(mpxp_context().engine().xp_core->mpxp_threads[i]->pth_id, _self)) i = 0; /* Use 0 as default handler */ MSG_FATAL("catching signal: %s in thread: %s (%i) in module: %s\n" ,strsignal(signo) - ,xp_core->mpxp_threads[i]->name + ,mpxp_context().engine().xp_core->mpxp_threads[i]->name ,i - ,xp_core->mpxp_threads[i]->unit); + ,mpxp_context().engine().xp_core->mpxp_threads[i]->unit); dump_trace(); #ifdef NDEBUG - xp_core->mpxp_threads[i]->sigfunc(); + mpxp_context().engine().xp_core->mpxp_threads[i]->sigfunc(); #endif signal(signo,SIG_DFL); /* try coredump*/ Modified: mplayerxp/xmpcore/sig_hand.h =================================================================== --- mplayerxp/xmpcore/sig_hand.h 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/sig_hand.h 2012-12-04 12:35:59 UTC (rev 506) @@ -6,10 +6,11 @@ #include <sys/types.h> #include "xmpcore/xmp_core.h" +#include "mplayerxp.h" namespace mpxp { - inline void __MP_UNIT(unsigned id,const char *name) { xp_core->mpxp_threads[id]->unit=name; } - inline void MP_UNIT(const char *name) { xp_core->mpxp_threads[main_id]->unit=name; } + inline void __MP_UNIT(unsigned id,const char *name) { mpxp_context().engine().xp_core->mpxp_threads[id]->unit=name; } + inline void MP_UNIT(const char *name) { mpxp_context().engine().xp_core->mpxp_threads[main_id]->unit=name; } void init_signal_handling( void ); void uninit_signal_handling( int xp_id ); Modified: mplayerxp/xmpcore/xmp_adecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_adecoder.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/xmp_adecoder.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -384,16 +384,16 @@ int xp_thread_decode_audio(Demuxer_Stream *d_audio) { - sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(xp_core->audio->sh); + sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(mpxp_context().engine().xp_core->audio->sh); sh_video_t* sh_video=NULL; - if(xp_core->video) sh_video=reinterpret_cast<sh_video_t*>(xp_core->video->sh); + if(mpxp_context().engine().xp_core->video) sh_video=reinterpret_cast<sh_video_t*>(mpxp_context().engine().xp_core->video->sh); int free_buf, vbuf_size, pref_buf; unsigned len=0; free_buf = get_free_audio_buffer(); if( free_buf == -1 ) { /* End of file */ - xp_core->audio->eof = 1; + mpxp_context().engine().xp_core->audio->eof = 1; return 0; } if( free_buf < (int)sh_audio->audio_out_minsize ) /* full */ @@ -404,9 +404,9 @@ if( len < MAX_OUTBURST ) /* Buffer underrun */ return decode_audio_buffer(d_audio,MAX_OUTBURST); - if(xp_core->video) { + if(mpxp_context().engine().xp_core->video) { /* Match video buffer */ - vbuf_size = dae_get_decoder_outrun(xp_core->video); + vbuf_size = dae_get_decoder_outrun(mpxp_context().engine().xp_core->video); pref_buf = vbuf_size / sh_video->fps * sh_audio->af_bps; pref_buf -= len; if( pref_buf > 0 ) { @@ -435,8 +435,8 @@ float d; priv->state=Pth_Run; - if(xp_core->video) xp_core->video->eof=0; - xp_core->audio->eof=0; + if(mpxp_context().engine().xp_core->video) mpxp_context().engine().xp_core->video->eof=0; + mpxp_context().engine().xp_core->audio->eof=0; MSG_T("\nDEC_AHEAD: entering...\n"); priv->pid = getpid(); __MP_UNIT(priv->p_idx,"dec_ahead"); @@ -450,7 +450,7 @@ } __MP_UNIT(priv->p_idx,"decode audio"); while((ret = xp_thread_decode_audio(d_audio)) == 2) {/* Almost empty buffer */ - if(xp_core->audio->eof) break; + if(mpxp_context().engine().xp_core->audio->eof) break; } dec_ahead_can_adseek=1; @@ -459,7 +459,7 @@ __MP_UNIT(priv->p_idx,"sleep"); LOCK_AUDIO_DECODE(); if(priv->state!=Pth_Canceling) { - if(xp_core->audio->eof) { + if(mpxp_context().engine().xp_core->audio->eof) { __MP_UNIT(priv->p_idx,"wait end of work"); pthread_cond_wait( &audio_decode_cond, &audio_decode_mutex ); } else if(ret==0) { /* Full buffer or end of file */ @@ -471,7 +471,7 @@ } else timeout.tv_sec = audio_play_timeout.tv_sec; } else { - if(xp_core->in_pause) + if(mpxp_context().engine().xp_core->in_pause) d = 1.0; else d = 0.1; Modified: mplayerxp/xmpcore/xmp_aplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -60,7 +60,7 @@ // Update buffer if needed MP_UNIT("mpca_decode"); // Enter AUDIO decoder module t=GetTimer(); - while(sh_audio->a_buffer_len<playsize && !xp_core->audio->eof){ + while(sh_audio->a_buffer_len<playsize && !mpxp_context().engine().xp_core->audio->eof){ if(!xmp_test_model(XMP_Run_AudioPlayback)) { ret=read_audio_buffer(sh_audio,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,&pts); @@ -71,7 +71,7 @@ if(ret>0) sh_audio->a_buffer_len+=ret; else { if(!d_audio->eof) break; - xp_core->audio->eof=1; + mpxp_context().engine().xp_core->audio->eof=1; break; } } @@ -201,7 +201,7 @@ samples = 10; min_audio = MAX_AUDIO_TIME; max_audio = 0; - } else if( !xp_core->audio->eof && collect_samples) { + } else if( !mpxp_context().engine().xp_core->audio->eof && collect_samples) { if( dec_ahead_audio_delay < min_audio ) min_audio = dec_ahead_audio_delay; if( dec_ahead_audio_delay > max_audio ) @@ -258,7 +258,7 @@ __MP_UNIT(priv->p_idx,"audio pause"); LOCK_AUDIO_PLAY(); - while( xp_core->in_pause && priv->state!=Pth_Canceling) { + while( mpxp_context().engine().xp_core->in_pause && priv->state!=Pth_Canceling) { pthread_cond_wait( &audio_play_cond, &audio_play_mutex ); } UNLOCK_AUDIO_PLAY(); Modified: mplayerxp/xmpcore/xmp_core.cpp =================================================================== --- mplayerxp/xmpcore/xmp_core.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/xmp_core.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -59,32 +59,32 @@ #endif void xmp_init(void) { - xp_core=(xp_core_t*)mp_mallocz(sizeof(xp_core_t)); - xp_core->initial_apts=HUGE; + mpxp_context().engine().xp_core=new(zeromem) xp_core_t; + mpxp_context().engine().xp_core->initial_apts=HUGE; } void xmp_uninit(void) { - delete xp_core->mpxp_threads[0]; - delete xp_core; - xp_core=NULL; + delete mpxp_context().engine().xp_core->mpxp_threads[0]; + delete mpxp_context().engine().xp_core; + mpxp_context().engine().xp_core=NULL; } unsigned xmp_register_main(sig_handler_t sigfunc) { unsigned idx=0; - xp_core->mpxp_threads[idx]=(mpxp_thread_t*)mp_mallocz(sizeof(mpxp_thread_t)); - xp_core->mpxp_threads[idx]->p_idx=idx; - xp_core->mpxp_threads[idx]->pid=getpid(); - xp_core->main_pth_id=xp_core->mpxp_threads[idx]->pth_id=pthread_self(); - xp_core->mpxp_threads[idx]->name = "main"; - xp_core->mpxp_threads[idx]->sigfunc = sigfunc; - xp_core->mpxp_threads[idx]->dae = NULL; - xp_core->num_threads++; + mpxp_context().engine().xp_core->mpxp_threads[idx]=(mpxp_thread_t*)mp_mallocz(sizeof(mpxp_thread_t)); + mpxp_context().engine().xp_core->mpxp_threads[idx]->p_idx=idx; + mpxp_context().engine().xp_core->mpxp_threads[idx]->pid=getpid(); + mpxp_context().engine().xp_core->main_pth_id=mpxp_context().engine().xp_core->mpxp_threads[idx]->pth_id=pthread_self(); + mpxp_context().engine().xp_core->mpxp_threads[idx]->name = "main"; + mpxp_context().engine().xp_core->mpxp_threads[idx]->sigfunc = sigfunc; + mpxp_context().engine().xp_core->mpxp_threads[idx]->dae = NULL; + mpxp_context().engine().xp_core->num_threads++; return idx; } static void print_stopped_thread(unsigned idx) { - MSG_OK("*** stop thread: [%i] %s\n",idx,xp_core->mpxp_threads[idx]->name); + MSG_OK("*** stop thread: [%i] %s\n",idx,mpxp_context().engine().xp_core->mpxp_threads[idx]->name); } void xmp_killall_threads(pthread_t _self) @@ -92,12 +92,12 @@ unsigned i; for(i=0;i < MAX_MPXP_THREADS;i++) { if( _self && - xp_core->mpxp_threads[i]->pth_id && - xp_core->mpxp_threads[i]->pth_id != xp_core->main_pth_id) { - pthread_kill(xp_core->mpxp_threads[i]->pth_id,SIGKILL); + mpxp_context().engine().xp_core->mpxp_threads[i]->pth_id && + mpxp_context().engine().xp_core->mpxp_threads[i]->pth_id != mpxp_context().engine().xp_core->main_pth_id) { + pthread_kill(mpxp_context().engine().xp_core->mpxp_threads[i]->pth_id,SIGKILL); print_stopped_thread(i); - delete xp_core->mpxp_threads[i]; - xp_core->mpxp_threads[i]=NULL; + delete mpxp_context().engine().xp_core->mpxp_threads[i]; + mpxp_context().engine().xp_core->mpxp_threads[i]=NULL; } } } @@ -168,7 +168,7 @@ if(it) { do { yield_timeslice(); - }while(dae_get_decoder_outrun(it) < xp_core->num_v_buffs/2); + }while(dae_get_decoder_outrun(it) < mpxp_context().engine().xp_core->num_v_buffs/2); } } @@ -212,6 +212,8 @@ it->frame[idx].v_pts=HUGE_VALF; } +int xmp_test_model(xmp_model_e value) { return (mpxp_context().engine().xp_core->flags&value)!=0; } + static xmp_model_e xmp_engine_compute_model(sh_video_t *shv, sh_audio_t *sha) { xmp_model_e rc; if(!shv && sha) { @@ -239,10 +241,10 @@ int xmp_init_engine(sh_video_t *shv, sh_audio_t *sha) { - xp_core->flags=xmp_engine_compute_model(shv,sha); + mpxp_context().engine().xp_core->flags=xmp_engine_compute_model(shv,sha); if(shv) { - xp_core->video=(dec_ahead_engine_t*)mp_mallocz(sizeof(dec_ahead_engine_t)); - dae_init(xp_core->video,xp_core->num_v_buffs,shv); + mpxp_context().engine().xp_core->video=(dec_ahead_engine_t*)mp_mallocz(sizeof(dec_ahead_engine_t)); + dae_init(mpxp_context().engine().xp_core->video,mpxp_context().engine().xp_core->num_v_buffs,shv); } if(sha) { if(xmp_test_model(XMP_Run_AudioPlayer)) { @@ -250,18 +252,18 @@ unsigned o_bps; unsigned min_reserv; o_bps=sha->af_bps; - if(xp_core->video) asize = std::max(unsigned(3*sha->audio_out_minsize), + if(mpxp_context().engine().xp_core->video) asize = std::max(unsigned(3*sha->audio_out_minsize), unsigned(std::max( unsigned(3*MAX_OUTBURST), - unsigned(o_bps*xp_core->num_v_buffs/shv->fps))))+MIN_BUFFER_RESERV; - else asize = o_bps*xp_core->num_a_buffs; + unsigned(o_bps*mpxp_context().engine().xp_core->num_v_buffs/shv->fps))))+MIN_BUFFER_RESERV; + else asize = o_bps*mpxp_context().engine().xp_core->num_a_buffs; /* FIXME: get better indices from asize/real_audio_packet_size */ min_reserv = sha->audio_out_minsize; if (o_bps > sha->o_bps) min_reserv = (float)min_reserv * (float)o_bps / (float)sha->o_bps; init_audio_buffer(asize+min_reserv,min_reserv+MIN_BUFFER_RESERV,asize/(sha->audio_out_minsize<10000?sha->audio_out_minsize:4000)+100,sha); } - xp_core->audio=(dec_ahead_engine_t*)mp_mallocz(sizeof(dec_ahead_engine_t)); - dae_init(xp_core->audio,xp_core->num_a_buffs,sha); + mpxp_context().engine().xp_core->audio=(dec_ahead_engine_t*)mp_mallocz(sizeof(dec_ahead_engine_t)); + dae_init(mpxp_context().engine().xp_core->audio,mpxp_context().engine().xp_core->num_a_buffs,sha); } return 0; } @@ -270,20 +272,20 @@ { xmp_stop_threads(force); - if(xp_core->video) { - dae_uninit(xp_core->video); - xp_core->video=NULL; + if(mpxp_context().engine().xp_core->video) { + dae_uninit(mpxp_context().engine().xp_core->video); + mpxp_context().engine().xp_core->video=NULL; } - if(xp_core->audio) { /* audio state doesn't matter on segfault :( */ + if(mpxp_context().engine().xp_core->audio) { /* audio state doesn't matter on segfault :( */ uninit_audio_buffer(); - xp_core->audio=NULL; + mpxp_context().engine().xp_core->audio=NULL; } } unsigned xmp_register_thread(dec_ahead_engine_t* dae,sig_handler_t sigfunc,mpxp_routine_t routine,const char *name) { unsigned stacksize=10485760; // 10MB per thread - unsigned idx=xp_core->num_threads; + unsigned idx=mpxp_context().engine().xp_core->num_threads; int rc; if(idx>=MAX_MPXP_THREADS) return UINT_MAX; pthread_attr_t attr; @@ -300,32 +302,32 @@ /* requires root privelegies */ pthread_attr_setschedpolicy(&attr,SCHED_FIFO); #endif - xp_core->mpxp_threads[idx]=(mpxp_thread_t*)mp_mallocz(sizeof(mpxp_thread_t)); + mpxp_context().engine().xp_core->mpxp_threads[idx]=(mpxp_thread_t*)mp_mallocz(sizeof(mpxp_thread_t)); - xp_core->mpxp_threads[idx]->p_idx=idx; - xp_core->mpxp_threads[idx]->name=name; - xp_core->mpxp_threads[idx]->routine=routine; - xp_core->mpxp_threads[idx]->sigfunc=sigfunc; - xp_core->mpxp_threads[idx]->state=Pth_Stand; - xp_core->mpxp_threads[idx]->dae=dae; + mpxp_context().engine().xp_core->mpxp_threads[idx]->p_idx=idx; + mpxp_context().engine().xp_core->mpxp_threads[idx]->name=name; + mpxp_context().engine().xp_core->mpxp_threads[idx]->routine=routine; + mpxp_context().engine().xp_core->mpxp_threads[idx]->sigfunc=sigfunc; + mpxp_context().engine().xp_core->mpxp_threads[idx]->state=Pth_Stand; + mpxp_context().engine().xp_core->mpxp_threads[idx]->dae=dae; - rc=pthread_create(&xp_core->mpxp_threads[idx]->pth_id,&attr,routine,xp_core->mpxp_threads[idx]); + rc=pthread_create(&mpxp_context().engine().xp_core->mpxp_threads[idx]->pth_id,&attr,routine,mpxp_context().engine().xp_core->mpxp_threads[idx]); pthread_attr_destroy(&attr); - xp_core->num_threads++; + mpxp_context().engine().xp_core->num_threads++; return (rc?UINT_MAX:idx); } int xmp_run_decoders( void ) { unsigned rc; - if(xp_core->audio && xmp_test_model(XMP_Run_AudioDecoder)) { - if((rc=xmp_register_thread(xp_core->audio,sig_audio_decode,a_dec_ahead_routine,"audio decoder"))==UINT_MAX) return rc; - while(xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); + if(mpxp_context().engine().xp_core->audio && xmp_test_model(XMP_Run_AudioDecoder)) { + if((rc=xmp_register_thread(mpxp_context().engine().xp_core->audio,sig_audio_decode,a_dec_ahead_routine,"audio decoder"))==UINT_MAX) return rc; + while(mpxp_context().engine().xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); } - if(xp_core->video && xmp_test_model(XMP_Run_VideoDecoder|XMP_Run_VA_Decoder)) { - if((rc=xmp_register_thread(xp_core->video,sig_video_decode,xmp_video_decoder,"video+audio decoders"))==UINT_MAX) return rc; - while(xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); + if(mpxp_context().engine().xp_core->video && xmp_test_model(XMP_Run_VideoDecoder|XMP_Run_VA_Decoder)) { + if((rc=xmp_register_thread(mpxp_context().engine().xp_core->video,sig_video_decode,xmp_video_decoder,"video+audio decoders"))==UINT_MAX) return rc; + while(mpxp_context().engine().xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); } return 0; } @@ -333,13 +335,13 @@ int xmp_run_players(void) { unsigned rc; - if(xp_core->audio && xmp_test_model(XMP_Run_AudioPlayer|XMP_Run_AudioPlayback)) { - if((rc=xmp_register_thread(xp_core->audio,sig_audio_play,audio_play_routine,"audio player"))==UINT_MAX) return rc; - while(xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); + if(mpxp_context().engine().xp_core->audio && xmp_test_model(XMP_Run_AudioPlayer|XMP_Run_AudioPlayback)) { + if((rc=xmp_register_thread(mpxp_context().engine().xp_core->audio,sig_audio_play,audio_play_routine,"audio player"))==UINT_MAX) return rc; + while(mpxp_context().engine().xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); } - if(xp_core->video && xmp_test_model(XMP_Run_VideoPlayer)) { - if((rc=xmp_register_thread(xp_core->video,sig_video_play,xmp_video_player,"video player"))==UINT_MAX) return rc; - while(xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); + if(mpxp_context().engine().xp_core->video && xmp_test_model(XMP_Run_VideoPlayer)) { + if((rc=xmp_register_thread(mpxp_context().engine().xp_core->video,sig_video_play,xmp_video_player,"video player"))==UINT_MAX) return rc; + while(mpxp_context().engine().xp_core->mpxp_threads[rc]->state!=Pth_Run) yield_timeslice(); } return 0; } @@ -348,15 +350,15 @@ void xmp_stop_threads(int force) { unsigned i; - for(i=1;i<xp_core->num_threads;i++) { - if(force) pthread_kill(xp_core->mpxp_threads[i]->pth_id,SIGKILL); + for(i=1;i<mpxp_context().engine().xp_core->num_threads;i++) { + if(force) pthread_kill(mpxp_context().engine().xp_core->mpxp_threads[i]->pth_id,SIGKILL); else { - xp_core->mpxp_threads[i]->state=Pth_Canceling; - while(xp_core->mpxp_threads[i]->state==Pth_Canceling) yield_timeslice(); + mpxp_context().engine().xp_core->mpxp_threads[i]->state=Pth_Canceling; + while(mpxp_context().engine().xp_core->mpxp_threads[i]->state==Pth_Canceling) yield_timeslice(); } print_stopped_thread(i); - delete xp_core->mpxp_threads[i]; - xp_core->mpxp_threads[i]=NULL; + delete mpxp_context().engine().xp_core->mpxp_threads[i]; + mpxp_context().engine().xp_core->mpxp_threads[i]=NULL; } } @@ -364,9 +366,9 @@ void xmp_halt_threads(int is_reset_vcache) { unsigned i; - for(i=1;i<xp_core->num_threads;i++) { - xp_core->mpxp_threads[i]->state=Pth_Sleep; - while(xp_core->mpxp_threads[i]->state==Pth_Sleep) yield_timeslice(); + for(i=1;i<mpxp_context().engine().xp_core->num_threads;i++) { + mpxp_context().engine().xp_core->mpxp_threads[i]->state=Pth_Sleep; + while(mpxp_context().engine().xp_core->mpxp_threads[i]->state==Pth_Sleep) yield_timeslice(); } } @@ -374,17 +376,17 @@ void xmp_restart_threads(int xp_id) { /* reset counters */ - dae_reset(xp_core->video); + dae_reset(mpxp_context().engine().xp_core->video); /* temporary solution */ reset_audio_buffer(); /* Ugly hack: but we should read audio packet before video after seeking. Else we'll get picture destortion on the screen */ - xp_core->initial_apts=HUGE; + mpxp_context().engine().xp_core->initial_apts=HUGE; unsigned i; - for(i=1;i<xp_core->num_threads;i++) { - xp_core->mpxp_threads[i]->state=Pth_Run; - while(xp_core->mpxp_threads[i]->state==Pth_ASleep) yield_timeslice(); + for(i=1;i<mpxp_context().engine().xp_core->num_threads;i++) { + mpxp_context().engine().xp_core->mpxp_threads[i]->state=Pth_Run; + while(mpxp_context().engine().xp_core->mpxp_threads[i]->state==Pth_ASleep) yield_timeslice(); } } Modified: mplayerxp/xmpcore/xmp_core.h =================================================================== --- mplayerxp/xmpcore/xmp_core.h 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/xmp_core.h 2012-12-04 12:35:59 UTC (rev 506) @@ -21,19 +21,19 @@ namespace mpxp { enum xp_modes { XP_NA=0, XP_UniCore, XP_DualCore, XP_TripleCore, XP_MultiCore }; - typedef struct xmp_frame_s { + struct xmp_frame_t { float v_pts; /* presentation time-stamp from input stream __huge_valf indicates EOF */ float duration; /* frame duration */ any_t* priv; - }xmp_frame_t; + }; - struct dec_ahead_engine_s; + struct dec_ahead_engine_t; - typedef any_t* (*func_new_frame_priv_t)(struct dec_ahead_engine_s*); - typedef void (*func_free_frame_priv_t)(struct dec_ahead_engine_s*,any_t*); + typedef any_t* (*func_new_frame_priv_t)(struct dec_ahead_engine_t*); + typedef void (*func_free_frame_priv_t)(struct dec_ahead_engine_t*,any_t*); - typedef struct dec_ahead_engine_s { + struct dec_ahead_engine_t { volatile unsigned player_idx; /* index of frame which is currently played */ volatile unsigned decoder_idx; /* index of frame which is currently decoded */ unsigned nframes; /* number of frames in buffer */ @@ -48,7 +48,7 @@ long long int num_played_frames; long long int num_decoded_frames; /* for frame dropping */ long long int num_dropped_frames; - }dec_ahead_engine_t; + }; enum { main_id=0 }; enum { MAX_MPXP_THREADS=16 }; @@ -57,14 +57,14 @@ typedef any_t*(*mpxp_routine_t)(any_t*); typedef void (*sig_handler_t)(void); - typedef enum xmp_model { + enum xmp_model_e { XMP_Run_AudioPlayer =0x00000001, XMP_Run_AudioPlayback =0x00000002, /* audio player+decoder together */ XMP_Run_VideoPlayer =0x00000004, XMP_Run_VA_Decoder =0x00000008, /* audio+video decoders together */ XMP_Run_AudioDecoder =0x00000010, XMP_Run_VideoDecoder =0x00000020 - }xmp_model_e; + }; inline xmp_model_e operator~(xmp_model_e a) { return static_cast<xmp_model_e>(~static_cast<unsigned>(a)); } inline xmp_model_e operator|(xmp_model_e a, xmp_model_e b) { return static_cast<xmp_model_e>(static_cast<unsigned>(a)|static_cast<unsigned>(b)); } @@ -74,7 +74,7 @@ inline xmp_model_e operator&=(xmp_model_e a, xmp_model_e b) { return (a=static_cast<xmp_model_e>(static_cast<unsigned>(a)&static_cast<unsigned>(b))); } inline xmp_model_e operator^=(xmp_model_e a, xmp_model_e b) { return (a=static_cast<xmp_model_e>(static_cast<unsigned>(a)^static_cast<unsigned>(b))); } - typedef struct mpxp_thread_s { + struct mpxp_thread_t { unsigned p_idx; const char* name; const char* unit; @@ -84,15 +84,15 @@ sig_handler_t sigfunc; dec_ahead_engine_t* dae; volatile enum mpxp_thread_state state; - }mpxp_thread_t; + }; - typedef struct initial_audio_pts_correction_s { + struct initial_audio_pts_correction_t { int need_correction; int pts_bytes; int nbytes; - }initial_audio_pts_correction_t; + }; - typedef struct xp_core_s { + struct xp_core_t { xmp_model_e flags; dec_ahead_engine_t* video; dec_ahead_engine_t* audio; @@ -108,10 +108,9 @@ int bad_pts; // for MPEGxx codecs float initial_apts; initial_audio_pts_correction_t initial_apts_corr; - }xp_core_t; - extern xp_core_t *xp_core; + }; - inline int xmp_test_model(xmp_model_e value) { return (xp_core->flags&value)!=0; } + int xmp_test_model(xmp_model_e value); void xmp_init(void); void xmp_uninit(void); Modified: mplayerxp/xmpcore/xmp_vdecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -34,14 +34,14 @@ "*********************************************\n" "Try increase number of buffer for decoding ahead\n" "Exist: %u, need: %u\n" - ,xp_core->num_v_buffs,(unsigned)(max_frame_delay*3*sh_video->fps)+3); + ,mpxp_context().engine().xp_core->num_v_buffs,(unsigned)(max_frame_delay*3*sh_video->fps)+3); prev_warn_delay=max_frame_delay; } } static unsigned compute_frame_dropping(sh_video_t* sh_video,float v_pts,float drop_barrier) { unsigned rc=0; - float screen_pts=dae_played_frame(xp_core->video).v_pts-(mp_conf.av_sync_pts?0:xp_core->initial_apts); + float screen_pts=dae_played_frame(mpxp_context().engine().xp_core->video).v_pts-(mp_conf.av_sync_pts?0:mpxp_context().engine().xp_core->initial_apts); static float prev_delta=64; float delta,max_frame_delay;/* delay for decoding of top slow frame */ max_frame_delay = mpxp_context().bench->max_video+mpxp_context().bench->max_vout; @@ -49,7 +49,7 @@ /* TODO: Replace the constants with some values which are depended on - xp_core->num_v_buffs and max_frame_delay to find out the smoothest way + mpxp_context().engine().xp_core->num_v_buffs and max_frame_delay to find out the smoothest way to display frames on slow machines. MAYBE!!!: (won't work with some realmedia streams for example) Try to borrow avifile's logic (btw, GPL'ed ;) for very slow systems: @@ -59,7 +59,7 @@ */ delta=v_pts-screen_pts; if(max_frame_delay*3 > drop_barrier) { - if(drop_barrier < (float)(xp_core->num_v_buffs-2)/sh_video->fps) drop_barrier += 1/sh_video->fps; + if(drop_barrier < (float)(mpxp_context().engine().xp_core->num_v_buffs-2)/sh_video->fps) drop_barrier += 1/sh_video->fps; else if(mp_conf.verbose) show_warn_cant_sync(sh_video,max_frame_delay); } @@ -76,7 +76,7 @@ if(delta < drop_barrier*2/3) fr_skip_divisor=3; else fr_skip_divisor=4; /* delta < drop_barrier */ - rc = (dae_curr_vdecoded(xp_core)%fr_skip_divisor)?0:1; + rc = (dae_curr_vdecoded(mpxp_context().engine().xp_core)%fr_skip_divisor)?0:1; if(delta>prev_delta) rc=0; } MSG_D("DEC_AHEAD: max_frame_delay*3=%f drop_barrier=%f prev_delta=%f delta=%f(v_pts=%f screen_pts=%f) n_fr_to_drop=%u\n",max_frame_delay*3,drop_barrier,prev_delta,delta,v_pts,xp_screen_pts,xp_n_frame_to_drop); @@ -87,10 +87,10 @@ static void reorder_pts_in_mpeg(void) { unsigned idx0=0, idx1, idx2, idx3; - idx1 = dae_curr_vdecoded(xp_core); - idx2 = dae_prev_vdecoded(xp_core); - xmp_frame_t* fra=xp_core->video->frame; - while( dae_curr_vplayed(xp_core) != idx2 && + idx1 = dae_curr_vdecoded(mpxp_context().engine().xp_core); + idx2 = dae_prev_vdecoded(mpxp_context().engine().xp_core); + xmp_frame_t* fra=mpxp_context().engine().xp_core->video->frame; + while( dae_curr_vplayed(mpxp_context().engine().xp_core) != idx2 && fra[idx2].v_pts > fra[idx1].v_pts && fra[idx2].v_pts < fra[idx1].v_pts+1.0 ) { float tmp; @@ -100,16 +100,16 @@ fra[idx2].duration = fra[idx1].v_pts - fra[idx2].v_pts; - idx3=(idx2-1)%xp_core->num_v_buffs; + idx3=(idx2-1)%mpxp_context().engine().xp_core->num_v_buffs; if(fra[idx2].v_pts > fra[idx3].v_pts && fra[idx2].v_pts - fra[idx3].v_pts < 1.0) fra[idx3].duration = fra[idx2].v_pts - fra[idx3].v_pts; - if(idx1 != dae_curr_vdecoded(xp_core)) fra[idx1].duration = fra[idx0].v_pts - fra[idx1].v_pts; + if(idx1 != dae_curr_vdecoded(mpxp_context().engine().xp_core)) fra[idx1].duration = fra[idx0].v_pts - fra[idx1].v_pts; idx0 = idx1; idx1 = idx2; - idx2=(idx2-1)%xp_core->num_v_buffs; + idx2=(idx2-1)%mpxp_context().engine().xp_core->num_v_buffs; } } @@ -131,28 +131,28 @@ priv->state=Pth_Run; priv->dae->eof = 0; - if(xp_core->audio) xp_core->audio->eof=0; + if(mpxp_context().engine().xp_core->audio) mpxp_context().engine().xp_core->audio->eof=0; MSG_T("\nDEC_AHEAD: entering...\n"); __MP_UNIT(priv->p_idx,"dec_ahead"); priv->pid = getpid(); - if(!xmp_test_model(XMP_Run_VA_Decoder) && xp_core->audio) + if(!xmp_test_model(XMP_Run_VA_Decoder) && mpxp_context().engine().xp_core->audio) priv->name = "video decoder"; - drop_barrier=(float)(xp_core->num_v_buffs/2)*(1/sh_video->fps); + drop_barrier=(float)(mpxp_context().engine().xp_core->num_v_buffs/2)*(1/sh_video->fps); if(mp_conf.av_sync_pts == -1 && !mpxp_context().use_pts_fix2) - xp_core->bad_pts = d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_ES || + mpxp_context().engine().xp_core->bad_pts = d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_ES || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG4_ES || d_video->demuxer->file_format == DEMUXER_TYPE_H264_ES || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PS || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TS; else - xp_core->bad_pts = mp_conf.av_sync_pts?0:1; + mpxp_context().engine().xp_core->bad_pts = mp_conf.av_sync_pts?0:1; while(!priv->dae->eof){ if(priv->state==Pth_Canceling) break; if(priv->state==Pth_Sleep) { pt_sleep: priv->state=Pth_ASleep; while(priv->state==Pth_ASleep) yield_timeslice(); - if(xp_core->bad_pts) mpeg_timer=HUGE; + if(mpxp_context().engine().xp_core->bad_pts) mpeg_timer=HUGE; continue; } __MP_UNIT(priv->p_idx,"dec_ahead 1"); @@ -160,7 +160,7 @@ #if 0 /* prevent reent access to non-reent demuxer */ //if(sh_video->num_frames>200) *((char*)0x100) = 1; // Testing crash - if(xp_core->audio && mp_conf.xp<XP_VAFull) { + if(mpxp_context().engine().xp_core->audio && mp_conf.xp<XP_VAFull) { __MP_UNIT(priv->p_idx,"decode audio"); while(2==xp_thread_decode_audio()) ; __MP_UNIT(priv->p_idx,"dec_ahead 2"); @@ -170,13 +170,13 @@ frame=video_read_frame_r(sh_video,sh_video->fps); if(!frame) { pt_exit_loop: - dae_decoded_mark_eof(xp_core->video); + dae_decoded_mark_eof(mpxp_context().engine().xp_core->video); priv->dae->eof=1; break; } - if(mp_conf.play_n_frames>0 && xp_core->video->num_decoded_frames >= mp_conf.play_n_frames) goto pt_exit_loop; + if(mp_conf.play_n_frames>0 && mpxp_context().engine().xp_core->video->num_decoded_frames >= mp_conf.play_n_frames) goto pt_exit_loop; /* frame was decoded into current decoder_idx */ - if(xp_core->bad_pts) { + if(mpxp_context().engine().xp_core->bad_pts) { if(mpeg_timer==HUGE) mpeg_timer=frame->pts; else if( mpeg_timer-duration<frame->pts ) { mpeg_timer=frame->pts; @@ -190,7 +190,7 @@ int cur_time; cur_time = GetTimerMS(); /* Ugly solution: disable frame dropping right after seeking! */ - if(cur_time - mpxp_context().seek_time > (xp_core->num_v_buffs/sh_video->fps)*100) xp_n_frame_to_drop=compute_frame_dropping(sh_video,frame->pts,drop_barrier); + if(cur_time - mpxp_context().seek_time > (mpxp_context().engine().xp_core->num_v_buffs/sh_video->fps)*100) xp_n_frame_to_drop=compute_frame_dropping(sh_video,frame->pts,drop_barrier); } /* if( mp_conf.frame_dropping ) */ if(!finite(frame->pts)) MSG_WARN("Bug of demuxer! Value of video pts=%f\n",frame->pts); if(frame->type!=VideoFrame) escape_player("VideoDecoder doesn't parse non video frames",mp_conf.max_trace); @@ -210,8 +210,8 @@ else drop_param=0; /* decode: */ if(mpxp_context().output_quality) { - unsigned total = xp_core->num_v_buffs/2; - unsigned distance = dae_get_decoder_outrun(xp_core->video); + unsigned total = mpxp_context().engine().xp_core->num_v_buffs/2; + unsigned distance = dae_get_decoder_outrun(mpxp_context().engine().xp_core->video); int our_quality; our_quality = mpxp_context().output_quality*distance/total; if(drop_param) mpcv_set_quality(mpxp_context().video().decoder,0); @@ -220,22 +220,22 @@ } frame->flags=drop_param; blit_frame=mpcv_decode(mpxp_context().video().decoder,frame); -MSG_DBG2("DECODER: %i[%i] %f\n",dae_curr_vdecoded(xp_core),frame->len,frame->pts); +MSG_DBG2("DECODER: %i[%i] %f\n",dae_curr_vdecoded(mpxp_context().engine().xp_core),frame->len,frame->pts); if(mpxp_context().output_quality) { if(drop_param) mpcv_set_quality(mpxp_context().video().decoder,mpxp_context().output_quality); } if(!blit_frame && drop_param) priv->dae->num_dropped_frames++; if(blit_frame) { - unsigned idx=dae_curr_vdecoded(xp_core); - if(xp_core->bad_pts) - xp_core->video->frame[idx].v_pts=mpeg_timer; + unsigned idx=dae_curr_vdecoded(mpxp_context().engine().xp_core); + if(mpxp_context().engine().xp_core->bad_pts) + mpxp_context().engine().xp_core->video->frame[idx].v_pts=mpeg_timer; else - xp_core->video->frame[idx].v_pts = frame->pts; - xp_core->video->frame[idx].duration=duration; - dae_decoded_clear_eof(xp_core->video); - if(!xp_core->bad_pts) { - int _idx = dae_prev_vdecoded(xp_core); - xp_core->video->frame[_idx].duration=frame->pts-xp_core->video->frame[_idx].v_pts; + mpxp_context().engine().xp_core->video->frame[idx].v_pts = frame->pts; + mpxp_context().engine().xp_core->video->frame[idx].duration=duration; + dae_decoded_clear_eof(mpxp_context().engine().xp_core->video); + if(!mpxp_context().engine().xp_core->bad_pts) { + int _idx = dae_prev_vdecoded(mpxp_context().engine().xp_core); + mpxp_context().engine().xp_core->video->frame[_idx].duration=frame->pts-mpxp_context().engine().xp_core->video->frame[_idx].v_pts; } if(mp_conf.frame_reorder) reorder_pts_in_mpeg(); } /* if (blit_frame) */ @@ -243,12 +243,12 @@ /* ------------ sleep --------------- */ /* sleep if thread is too fast ;) */ if(blit_frame) - while(!dae_inc_decoded(xp_core->video)) { + while(!dae_inc_decoded(mpxp_context().engine().xp_core->video)) { MSG_T("DEC_AHEAD: sleep: player=%i decoder=%i)\n" ,dae_curr_vplayed(),dae_curr_vdecoded()); if(priv->state==Pth_Canceling) goto pt_exit; if(priv->state==Pth_Sleep) goto pt_sleep; - if(xp_core->audio && xmp_test_model(XMP_Run_VA_Decoder)) { + if(mpxp_context().engine().xp_core->audio && xmp_test_model(XMP_Run_VA_Decoder)) { __MP_UNIT(priv->p_idx,"decode audio"); xp_thread_decode_audio(d_audio); __MP_UNIT(priv->p_idx,"dec_ahead 5"); @@ -259,8 +259,8 @@ /*------------------------ frame decoded. --------------------*/ } /* while(!priv->dae->eof)*/ -if(xp_core->audio && xmp_test_model(XMP_Run_VA_Decoder)) { - while(!xp_core->audio->eof && priv->state!=Pth_Canceling && priv->state!=Pth_Sleep) { +if(mpxp_context().engine().xp_core->audio && xmp_test_model(XMP_Run_VA_Decoder)) { + while(!mpxp_context().engine().xp_core->audio->eof && priv->state!=Pth_Canceling && priv->state!=Pth_Sleep) { __MP_UNIT(priv->p_idx,"decode audio"); if(!xp_thread_decode_audio(d_audio)) yield_timeslice(); __MP_UNIT(priv->p_idx,NULL); @@ -277,8 +277,8 @@ MSG_T("sig_video_decode\n"); mpxp_print_flush(); - xp_core->video->eof = 1; - dae_decoded_mark_eof(xp_core->video); + mpxp_context().engine().xp_core->video->eof = 1; + dae_decoded_mark_eof(mpxp_context().engine().xp_core->video); /* Unlock all mutex ( man page says it may deadlock, but what is worse deadlock here or later? ) Modified: mplayerxp/xmpcore/xmp_vplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vplayer.cpp 2012-12-04 11:26:21 UTC (rev 505) +++ mplayerxp/xmpcore/xmp_vplayer.cpp 2012-12-04 12:35:59 UTC (rev 506) @@ -30,25 +30,25 @@ static void __show_status_line(float a_pts,float v_pts,float delay,float AV_delay) { MSG_STATUS("A:%6.1f V:%6.1f A-V:%7.3f %3d/%3d %2d%% %2d%% %4.1f%% %d [frms: [%i]]\n", a_pts-delay,v_pts,AV_delay - ,xp_core->video->num_played_frames,xp_core->video->num_decoded_frames + ,mpxp_context().engine().xp_core->video->num_played_frames,mpxp_context().engine().xp_core->video->num_decoded_frames ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->video/(double)v_pts):0 ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->vout/(double)v_pts):0 ,(v_pts>0.5)?(100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)v_pts):0 ,mpxp_context().output_quality - ,dae_curr_vplayed(xp_core) + ,dae_curr_vplayed(mpxp_context().engine().xp_core) ); fflush(stdout); } static void show_status_line_no_apts(sh_audio_t* sh_audio,float v_pts) { - if(mp_conf.av_sync_pts && sh_audio && (!xp_core->audio->eof || ao_get_delay(mpxp_context().audio().output))) { + if(mp_conf.av_sync_pts && sh_audio && (!mpxp_context().engine().xp_core->audio->eof || ao_get_delay(mpxp_context().audio().output))) { float a_pts = sh_audio->timer-ao_get_delay(mpxp_context().audio().output); MSG_STATUS("A:%6.1f V:%6.1f A-V:%7.3f ct:%7.3f %3d/%3d %2d%% %2d%% %4.1f%% %d\r" ,a_pts ,v_pts ,a_pts-v_pts ,0.0 - ,xp_core->video->num_played_frames,xp_core->video->num_decoded_frames + ,mpxp_context().engine().xp_core->video->num_played_frames,mpxp_context().engine().xp_core->video->num_decoded_frames ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->video/(double)v_pts):0 ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->vout/(double)v_pts):0 ,(v_pts>0.5)?(100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)v_pts):0 @@ -57,7 +57,7 @@ } else MSG_STATUS("V:%6.1f %3d %2d%% %2d%% %4.1f%% %d\r" ,v_pts - ,xp_core->video->num_played_frames + ,mpxp_context().engine().xp_core->video->num_played_frames ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->video/(double)v_pts):0 ,(v_pts>0.5)?(int)(100.0*mpxp_context().bench->vout/(double)v_pts):0 ,(v_pts>0.5)?(100.0*(mpxp_context().bench->audio+mpxp_context().bench->audio_decode)/(double)v_pts):0 @@ -93,14 +93,14 @@ static float vplayer_compute_sleep_time(sh_audio_t* sh_audio,sh_video_t* sh_video,xmp_frame_t* shva_prev,float screen_pts) { float sleep_time=0; - if(sh_audio && xp_core->audio) { - /* FIXME!!! need the same technique to detect xp_core->audio->eof as for video_eof! + if(sh_audio && mpxp_context().engine().xp_core->audio) { + /* FIXME!!! need the same technique to detect mpxp_context().engine().xp_core->audio->eof as for video_eof! often ao_get_delay() never returns 0 :( */ - if(xp_core->audio->eof && !get_delay_audio_buffer()) goto nosound_model; - if((!xp_core->audio->eof || ao_get_delay(mpxp_context().audio().output)) && + if(mpxp_context().engine().xp_core->audio->eof && !get_delay_audio_buffer()) goto nosound_model; + if((!mpxp_context().engine().xp_core->audio->eof || ao_get_delay(mpxp_context().a... [truncated message content] |
From: <nic...@us...> - 2012-12-04 13:56:52
|
Revision: 507 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=507&view=rev Author: nickols_k Date: 2012-12-04 13:56:44 +0000 (Tue, 04 Dec 2012) Log Message: ----------- new class Demuxer_Info Modified Paths: -------------- mplayerxp/libmpdemux/Makefile mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_demuxers.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mov.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_realaud.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demux_vqf.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/libmpdemux/mux_mpxp64.cpp mplayerxp/mplayerxp.cpp Added Paths: ----------- mplayerxp/libmpdemux/demuxer_info.cpp mplayerxp/libmpdemux/demuxer_info.h Modified: mplayerxp/libmpdemux/Makefile =================================================================== --- mplayerxp/libmpdemux/Makefile 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/Makefile 2012-12-04 13:56:44 UTC (rev 507) @@ -49,7 +49,7 @@ CXXSRCS += mux_mpxp64.cpp mux_raw.cpp #SRCS+= mux_lavf.c -CXXSRCS+= demuxer.cpp demuxer_packet.cpp demuxer_stream.cpp demuxer_r.cpp +CXXSRCS+= demuxer.cpp demuxer_info.cpp demuxer_packet.cpp demuxer_stream.cpp demuxer_r.cpp CXXSRCS+= muxer.cpp mpdemux.cpp OBJS = $(SRCS:.c=.o) Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -139,7 +139,7 @@ char buf[chunk_size+1]; stream_read(s,buf,chunk_size); buf[chunk_size]=0; - demux_info_add(demuxer, INFOT_NAME, buf); + demuxer->info().add(INFOT_NAME, buf); if(priv->verc && (chunk_size&1)) stream_read_char(s); } else @@ -148,7 +148,7 @@ char buf[chunk_size+1]; stream_read(s,buf,chunk_size); buf[chunk_size]=0; - demux_info_add(demuxer, INFOT_AUTHOR, buf); + demuxer->info().add(INFOT_AUTHOR, buf); if(priv->verc && (chunk_size&1)) stream_read_char(s); } else @@ -157,7 +157,7 @@ char buf[chunk_size+1]; stream_read(s,buf,chunk_size); buf[chunk_size]=0; - demux_info_add(demuxer, INFOT_COPYRIGHT, buf); + demuxer->info().add(INFOT_COPYRIGHT, buf); if(priv->verc && (chunk_size&1)) stream_read_char(s); } else @@ -166,7 +166,7 @@ char buf[chunk_size+1]; stream_read(s,buf,chunk_size); buf[chunk_size]=0; - demux_info_add(demuxer, INFOT_DESCRIPTION, buf); + demuxer->info().add(INFOT_DESCRIPTION, buf); if(priv->verc && (chunk_size&1)) stream_read_char(s); } else Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -248,41 +248,45 @@ MSG_V("\n"); // extract the title if( apriv->contenth.title_size!=0 ) { - string=(char*)mp_malloc(apriv->contenth.title_size); - stream_read(demuxer->stream, string, apriv->contenth.title_size); - pack_asf_string(string, apriv->contenth.title_size); - demux_info_add(demuxer, INFOT_NAME, string); + string=new char[apriv->contenth.title_size]; + stream_read(demuxer->stream, string, apriv->contenth.title_size); + pack_asf_string(string, apriv->contenth.title_size); + demuxer->info().add(INFOT_NAME, string); + delete string; } // extract the author if( apriv->contenth.author_size!=0 ) { - string=(char*)mp_realloc((any_t*)string, apriv->contenth.author_size); - stream_read(demuxer->stream, string, apriv->contenth.author_size); - pack_asf_string(string, apriv->contenth.author_size); - demux_info_add(demuxer, INFOT_AUTHOR, string); + string=new char [apriv->contenth.author_size]; + stream_read(demuxer->stream, string, apriv->contenth.author_size); + pack_asf_string(string, apriv->contenth.author_size); + demuxer->info().add(INFOT_AUTHOR, string); + delete string; } // extract the copyright if( apriv->contenth.copyright_size!=0 ) { - string=(char*)mp_realloc((any_t*)string, apriv->contenth.copyright_size); - stream_read(demuxer->stream, string, apriv->contenth.copyright_size); - pack_asf_string(string, apriv->contenth.copyright_size); - demux_info_add(demuxer, INFOT_COPYRIGHT, string); + string=new char [apriv->contenth.copyright_size]; + stream_read(demuxer->stream, string, apriv->contenth.copyright_size); + pack_asf_string(string, apriv->contenth.copyright_size); + demuxer->info().add(INFOT_COPYRIGHT, string); + delete string; } // extract the comment if( apriv->contenth.comment_size!=0 ) { - string=(char*)mp_realloc((any_t*)string, apriv->contenth.comment_size); - stream_read(demuxer->stream, string, apriv->contenth.comment_size); - pack_asf_string(string, apriv->contenth.comment_size); - demux_info_add(demuxer, INFOT_COMMENTS, string); + string=new char [apriv->contenth.comment_size]; + stream_read(demuxer->stream, string, apriv->contenth.comment_size); + pack_asf_string(string, apriv->contenth.comment_size); + demuxer->info().add(INFOT_COMMENTS, string); + delete string; } // extract the rating if( apriv->contenth.rating_size!=0 ) { - string=(char*)mp_realloc((any_t*)string, apriv->contenth.rating_size); - stream_read(demuxer->stream, string, apriv->contenth.rating_size); - pack_asf_string(string, apriv->contenth.comment_size); - demux_info_add(demuxer, INFOT_RATING, string); + string=new char [apriv->contenth.rating_size]; + stream_read(demuxer->stream, string, apriv->contenth.rating_size); + pack_asf_string(string, apriv->contenth.comment_size); + demuxer->info().add(INFOT_RATING, string); + delete string; } MSG_V("\n"); - delete string; break; } case ASF_GUID_PREFIX_stream_group: { Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -457,26 +457,26 @@ demuxer->movi_end = stream_tell(s)-3; stream_read(s,buf,30); buf[30] = '\0'; - demux_info_add(demuxer,INFOT_NAME,buf); + demuxer->info().add(INFOT_NAME,buf); stream_read(s,buf,30); buf[30] = '\0'; - demux_info_add(demuxer,INFOT_AUTHOR,buf); + demuxer->info().add(INFOT_AUTHOR,buf); stream_read(s,buf,30); buf[30] = '\0'; - demux_info_add(demuxer,INFOT_ALBUM,buf); + demuxer->info().add(INFOT_ALBUM,buf); stream_read(s,buf,4); buf[4] = '\0'; - demux_info_add(demuxer,INFOT_DATE,buf); + demuxer->info().add(INFOT_DATE,buf); stream_read(s,buf,30); buf[30] = '\0'; - demux_info_add(demuxer,INFOT_COMMENTS,buf); + demuxer->info().add(INFOT_COMMENTS,buf); if(buf[28] == 0 && buf[29] != 0) { uint8_t trk = (uint8_t)buf[29]; sprintf(buf,"%d",trk); - demux_info_add(demuxer,INFOT_TRACK,buf); + demuxer->info().add(INFOT_TRACK,buf); } g = stream_read_char(s); - demux_info_add(demuxer,INFOT_GENRE,genres[g]); + demuxer->info().add(INFOT_GENRE,genres[g]); } } return 1; @@ -567,21 +567,21 @@ data[std::min(len,unsigned(4096))]=0; switch(id) { - case mmioFOURCC(0,'T','T','1'): if(len>1) demux_info_add(demuxer,INFOT_DESCRIPTION,data+1); break; - case mmioFOURCC(0,'T','T','2'): if(len>1) demux_info_add(demuxer,INFOT_NAME,data+1); break; - case mmioFOURCC(0,'T','T','3'): if(len>1) demux_info_add(demuxer,INFOT_SUBJECT,data+1); break; - case mmioFOURCC(0,'C','O','M'): if(len>4) demux_info_add(demuxer,INFOT_COMMENTS,data+4); break; - case mmioFOURCC(0,'T','C','O'): if(len>1) demux_info_add(demuxer,INFOT_GENRE,genres[data[1]]); break; - case mmioFOURCC(0,'T','C','R'): if(len>1) demux_info_add(demuxer,INFOT_COPYRIGHT,genres[data[1]]); break; - case mmioFOURCC(0,'T','P','1'): if(len>1) demux_info_add(demuxer,INFOT_AUTHOR,data+1); break; - case mmioFOURCC(0,'T','A','L'): if(len>1) demux_info_add(demuxer,INFOT_ALBUM,data+1); break; - case mmioFOURCC(0,'T','R','K'): if(len>1) demux_info_add(demuxer,INFOT_TRACK,data+1); break; - case mmioFOURCC(0,'T','Y','E'): if(len>1) demux_info_add(demuxer,INFOT_DATE,data+1); break; - case mmioFOURCC(0,'T','E','N'): if(len>1) demux_info_add(demuxer,INFOT_ENCODER,data+1); break; - case mmioFOURCC(0,'T','M','T'): if(len>1) demux_info_add(demuxer,INFOT_SOURCE_MEDIA,data+1); break; - case mmioFOURCC(0,'T','F','T'): if(len>1) demux_info_add(demuxer,INFOT_MIME,data+1); break; - case mmioFOURCC(0,'P','O','P'): if(len>1) demux_info_add(demuxer,INFOT_RATING,data+1); break; - case mmioFOURCC(0,'W','X','X'): if(len>1) demux_info_add(demuxer,INFOT_WWW,data+1); break; + case mmioFOURCC(0,'T','T','1'): if(len>1) demuxer->info().add(INFOT_DESCRIPTION,data+1); break; + case mmioFOURCC(0,'T','T','2'): if(len>1) demuxer->info().add(INFOT_NAME,data+1); break; + case mmioFOURCC(0,'T','T','3'): if(len>1) demuxer->info().add(INFOT_SUBJECT,data+1); break; + case mmioFOURCC(0,'C','O','M'): if(len>4) demuxer->info().add(INFOT_COMMENTS,data+4); break; + case mmioFOURCC(0,'T','C','O'): if(len>1) demuxer->info().add(INFOT_GENRE,genres[data[1]]); break; + case mmioFOURCC(0,'T','C','R'): if(len>1) demuxer->info().add(INFOT_COPYRIGHT,genres[data[1]]); break; + case mmioFOURCC(0,'T','P','1'): if(len>1) demuxer->info().add(INFOT_AUTHOR,data+1); break; + case mmioFOURCC(0,'T','A','L'): if(len>1) demuxer->info().add(INFOT_ALBUM,data+1); break; + case mmioFOURCC(0,'T','R','K'): if(len>1) demuxer->info().add(INFOT_TRACK,data+1); break; + case mmioFOURCC(0,'T','Y','E'): if(len>1) demuxer->info().add(INFOT_DATE,data+1); break; + case mmioFOURCC(0,'T','E','N'): if(len>1) demuxer->info().add(INFOT_ENCODER,data+1); break; + case mmioFOURCC(0,'T','M','T'): if(len>1) demuxer->info().add(INFOT_SOURCE_MEDIA,data+1); break; + case mmioFOURCC(0,'T','F','T'): if(len>1) demuxer->info().add(INFOT_MIME,data+1); break; + case mmioFOURCC(0,'P','O','P'): if(len>1) demuxer->info().add(INFOT_RATING,data+1); break; + case mmioFOURCC(0,'W','X','X'): if(len>1) demuxer->info().add(INFOT_WWW,data+1); break; case 0: goto end; default: MSG_WARN("Unhandled frame: %3s\n",buf); break; } @@ -640,21 +640,21 @@ MSG_V("ID3: %4s len %u\n",buf,len); switch(id) { - case mmioFOURCC('T','I','T','1'): if(len>1) demux_info_add(demuxer,INFOT_DESCRIPTION,data+1); break; - case mmioFOURCC('T','I','T','2'): if(len>1) demux_info_add(demuxer,INFOT_NAME,data+1); break; - case mmioFOURCC('T','I','T','3'): if(len>1) demux_info_add(demuxer,INFOT_SUBJECT,data+1); break; - case mmioFOURCC('C','O','M','M'): if(len>4) demux_info_add(demuxer,INFOT_COMMENTS,data+4); break; - case mmioFOURCC('T','C','O','N'): if(len>1) demux_info_add(demuxer,INFOT_GENRE,genres[data[1]]); break; - case mmioFOURCC('T','P','E','1'): if(len>1) demux_info_add(demuxer,INFOT_AUTHOR,data+1); break; - case mmioFOURCC('T','A','L','B'): if(len>1) demux_info_add(demuxer,INFOT_ALBUM,data+1); break; - case mmioFOURCC('T','R','C','K'): if(len>1) demux_info_add(demuxer,INFOT_TRACK,data+1); break; - case mmioFOURCC('T','Y','E','R'): if(len>1) demux_info_add(demuxer,INFOT_DATE,data+1); break; - case mmioFOURCC('T','E','N','C'): if(len>1) demux_info_add(demuxer,INFOT_ENCODER,data+1); break; - case mmioFOURCC('T','C','O','P'): if(len>1) demux_info_add(demuxer,INFOT_COPYRIGHT,data+1); break; - case mmioFOURCC('T','M','E','D'): if(len>1) demux_info_add(demuxer,INFOT_SOURCE_MEDIA,data+1); break; - case mmioFOURCC('T','F','L','T'): if(len>1) demux_info_add(demuxer,INFOT_MIME,data+1); break; - case mmioFOURCC('P','O','P','M'): if(len>1) demux_info_add(demuxer,INFOT_RATING,data+1); break; - case mmioFOURCC('W','X','X','X'): if(len>1) demux_info_add(demuxer,INFOT_WWW,data+1); break; + case mmioFOURCC('T','I','T','1'): if(len>1) demuxer->info().add(INFOT_DESCRIPTION,data+1); break; + case mmioFOURCC('T','I','T','2'): if(len>1) demuxer->info().add(INFOT_NAME,data+1); break; + case mmioFOURCC('T','I','T','3'): if(len>1) demuxer->info().add(INFOT_SUBJECT,data+1); break; + case mmioFOURCC('C','O','M','M'): if(len>4) demuxer->info().add(INFOT_COMMENTS,data+4); break; + case mmioFOURCC('T','C','O','N'): if(len>1) demuxer->info().add(INFOT_GENRE,genres[data[1]]); break; + case mmioFOURCC('T','P','E','1'): if(len>1) demuxer->info().add(INFOT_AUTHOR,data+1); break; + case mmioFOURCC('T','A','L','B'): if(len>1) demuxer->info().add(INFOT_ALBUM,data+1); break; + case mmioFOURCC('T','R','C','K'): if(len>1) demuxer->info().add(INFOT_TRACK,data+1); break; + case mmioFOURCC('T','Y','E','R'): if(len>1) demuxer->info().add(INFOT_DATE,data+1); break; + case mmioFOURCC('T','E','N','C'): if(len>1) demuxer->info().add(INFOT_ENCODER,data+1); break; + case mmioFOURCC('T','C','O','P'): if(len>1) demuxer->info().add(INFOT_COPYRIGHT,data+1); break; + case mmioFOURCC('T','M','E','D'): if(len>1) demuxer->info().add(INFOT_SOURCE_MEDIA,data+1); break; + case mmioFOURCC('T','F','L','T'): if(len>1) demuxer->info().add(INFOT_MIME,data+1); break; + case mmioFOURCC('P','O','P','M'): if(len>1) demuxer->info().add(INFOT_RATING,data+1); break; + case mmioFOURCC('W','X','X','X'): if(len>1) demuxer->info().add(INFOT_WWW,data+1); break; case 0: goto end; default: MSG_V("Unhandled frame: %4s\n",buf); break; } @@ -717,21 +717,21 @@ switch(id) { /* first byte of data indicates encoding type: 0-ASCII (1-2)-UTF16(LE,BE) 3-UTF8 */ - case mmioFOURCC('T','I','T','1'): if(len>1) demux_info_add(demuxer,INFOT_DESCRIPTION,data+1); break; - case mmioFOURCC('T','I','T','2'): if(len>1) demux_info_add(demuxer,INFOT_NAME,data+1); break; - case mmioFOURCC('T','I','T','3'): if(len>1) demux_info_add(demuxer,INFOT_SUBJECT,data+1); break; - case mmioFOURCC('C','O','M','M'): if(len>4) demux_info_add(demuxer,INFOT_COMMENTS,data+4); break; - case mmioFOURCC('T','C','O','N'): if(len>1) demux_info_add(demuxer,INFOT_GENRE,genres[data[1]]); break; - case mmioFOURCC('T','P','E','1'): if(len>1) demux_info_add(demuxer,INFOT_AUTHOR,data+1); break; - case mmioFOURCC('T','A','L','B'): if(len>1) demux_info_add(demuxer,INFOT_ALBUM,data+1); break; - case mmioFOURCC('T','R','C','K'): if(len>1) demux_info_add(demuxer,INFOT_TRACK,data+1); break; -/*!*/ case mmioFOURCC('T','D','R','C'): if(len>1) demux_info_add(demuxer,INFOT_DATE,data+1); break; - case mmioFOURCC('T','E','N','C'): if(len>1) demux_info_add(demuxer,INFOT_ENCODER,data+1); break; - case mmioFOURCC('T','C','O','P'): if(len>1) demux_info_add(demuxer,INFOT_COPYRIGHT,data+1); break; - case mmioFOURCC('T','M','E','D'): if(len>1) demux_info_add(demuxer,INFOT_SOURCE_MEDIA,data+1); break; - case mmioFOURCC('T','F','L','T'): if(len>1) demux_info_add(demuxer,INFOT_MIME,data+1); break; - case mmioFOURCC('P','O','P','M'): if(len>1) demux_info_add(demuxer,INFOT_RATING,data+1); break; - case mmioFOURCC('W','X','X','X'): if(len>1) demux_info_add(demuxer,INFOT_WWW,data+1); break; + case mmioFOURCC('T','I','T','1'): if(len>1) demuxer->info().add(INFOT_DESCRIPTION,data+1); break; + case mmioFOURCC('T','I','T','2'): if(len>1) demuxer->info().add(INFOT_NAME,data+1); break; + case mmioFOURCC('T','I','T','3'): if(len>1) demuxer->info().add(INFOT_SUBJECT,data+1); break; + case mmioFOURCC('C','O','M','M'): if(len>4) demuxer->info().add(INFOT_COMMENTS,data+4); break; + case mmioFOURCC('T','C','O','N'): if(len>1) demuxer->info().add(INFOT_GENRE,genres[data[1]]); break; + case mmioFOURCC('T','P','E','1'): if(len>1) demuxer->info().add(INFOT_AUTHOR,data+1); break; + case mmioFOURCC('T','A','L','B'): if(len>1) demuxer->info().add(INFOT_ALBUM,data+1); break; + case mmioFOURCC('T','R','C','K'): if(len>1) demuxer->info().add(INFOT_TRACK,data+1); break; +/*!*/ case mmioFOURCC('T','D','R','C'): if(len>1) demuxer->info().add(INFOT_DATE,data+1); break; + case mmioFOURCC('T','E','N','C'): if(len>1) demuxer->info().add(INFOT_ENCODER,data+1); break; + case mmioFOURCC('T','C','O','P'): if(len>1) demuxer->info().add(INFOT_COPYRIGHT,data+1); break; + case mmioFOURCC('T','M','E','D'): if(len>1) demuxer->info().add(INFOT_SOURCE_MEDIA,data+1); break; + case mmioFOURCC('T','F','L','T'): if(len>1) demuxer->info().add(INFOT_MIME,data+1); break; + case mmioFOURCC('P','O','P','M'): if(len>1) demuxer->info().add(INFOT_RATING,data+1); break; + case mmioFOURCC('W','X','X','X'): if(len>1) demuxer->info().add(INFOT_WWW,data+1); break; case 0: goto end; default: MSG_V("Unhandled frame: %4s\n",buf); break; } @@ -1260,7 +1260,7 @@ stream_read(s,note,rlen); note[rlen]=0; if(slen>rlen) stream_skip(s,slen-rlen); - demux_info_add(demuxer,INFOT_NAME,note); + demuxer->info().add(INFOT_NAME,note); MSG_DBG2("RIFF 'labl' %u %s accepted\n",slen,note); } else @@ -1271,7 +1271,7 @@ stream_read(s,note,rlen); note[rlen]=0; if(slen>rlen) stream_skip(s,slen-rlen); - demux_info_add(demuxer,INFOT_COMMENTS,note); + demuxer->info().add(INFOT_COMMENTS,note); MSG_DBG2("RIFF 'note' %u %s accepted\n",slen,note); } else stream_skip(s,subchunk_size); Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -477,7 +477,7 @@ chunksize-=len; buf[len]=0; MSG_V("%-10s: %s\n",hdr,buf); - if(infot!=-1) demux_info_add(demuxer, infot, buf); + if(infot!=-1) demuxer->info().add(infot, buf); else MSG_V(" %s: %s\n",hdr,buf); } } Modified: mplayerxp/libmpdemux/demux_demuxers.cpp =================================================================== --- mplayerxp/libmpdemux/demux_demuxers.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_demuxers.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -98,6 +98,5 @@ dd_priv_t* priv = static_cast<dd_priv_t*>(demuxer->priv); delete priv; - demux_info_free(demuxer); delete demuxer; } Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -262,14 +262,14 @@ AVDictionaryEntry *tag = NULL; while((tag = av_dict_get(avfc->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) { - if(strcmp(tag->key,"title")==0) demux_info_add(demuxer,INFOT_NAME,tag->value); - else if(strcmp(tag->key,"author")==0)demux_info_add(demuxer,INFOT_AUTHOR,tag->value); - else if(strcmp(tag->key,"copyright")==0)demux_info_add(demuxer,INFOT_COPYRIGHT,tag->value); - else if(strcmp(tag->key,"comment")==0) demux_info_add(demuxer,INFOT_COMMENTS,tag->value); - else if(strcmp(tag->key,"album")==0) demux_info_add(demuxer,INFOT_ALBUM,tag->value); - else if(strcmp(tag->key,"genre")==0) demux_info_add(demuxer,INFOT_GENRE,tag->value); - else if(strcmp(tag->key,"track")==0) demux_info_add(demuxer,INFOT_TRACK,tag->value); - else if(strcmp(tag->key,"date")==0) demux_info_add(demuxer,INFOT_DATE,tag->value); + if(strcmp(tag->key,"title")==0) demuxer->info().add(INFOT_NAME,tag->value); + else if(strcmp(tag->key,"author")==0)demuxer->info().add(INFOT_AUTHOR,tag->value); + else if(strcmp(tag->key,"copyright")==0)demuxer->info().add(INFOT_COPYRIGHT,tag->value); + else if(strcmp(tag->key,"comment")==0) demuxer->info().add(INFOT_COMMENTS,tag->value); + else if(strcmp(tag->key,"album")==0) demuxer->info().add(INFOT_ALBUM,tag->value); + else if(strcmp(tag->key,"genre")==0) demuxer->info().add(INFOT_GENRE,tag->value); + else if(strcmp(tag->key,"track")==0) demuxer->info().add(INFOT_TRACK,tag->value); + else if(strcmp(tag->key,"date")==0) demuxer->info().add(INFOT_DATE,tag->value); } for(j=0; j<avfc->nb_streams; j++){ Modified: mplayerxp/libmpdemux/demux_mov.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mov.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_mov.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -1410,17 +1410,17 @@ switch(udta_id) { case MOV_FOURCC(0xa9,'a','u','t'): - demux_info_add(demuxer, INFOT_AUTHOR, &text[2]); + demuxer->info().add( INFOT_AUTHOR, &text[2]); break; case MOV_FOURCC(0xa9,'c','p','y'): - demux_info_add(demuxer, INFOT_COPYRIGHT, &text[2]); + demuxer->info().add( INFOT_COPYRIGHT, &text[2]); break; case MOV_FOURCC(0xa9,'i','n','f'): - demux_info_add(demuxer, INFOT_DESCRIPTION, &text[2]); + demuxer->info().add( INFOT_DESCRIPTION, &text[2]); break; case MOV_FOURCC('n','a','m','e'): case MOV_FOURCC(0xa9,'n','a','m'): - demux_info_add(demuxer, INFOT_NAME, &text[2]); + demuxer->info().add( INFOT_NAME, &text[2]); break; case MOV_FOURCC(0xa9,'A','R','T'): MSG_V(" Artist: %s\n", &text[2]); @@ -1429,16 +1429,16 @@ MSG_V(" Director: %s\n", &text[2]); break; case MOV_FOURCC(0xa9,'c','m','t'): - demux_info_add(demuxer, INFOT_COMMENTS, &text[2]); + demuxer->info().add( INFOT_COMMENTS, &text[2]); break; case MOV_FOURCC(0xa9,'r','e','q'): MSG_V(" Requirements: %s\n", &text[2]); break; case MOV_FOURCC(0xa9,'s','w','r'): - demux_info_add(demuxer, INFOT_ENCODER, &text[2]); + demuxer->info().add( INFOT_ENCODER, &text[2]); break; case MOV_FOURCC(0xa9,'d','a','y'): - demux_info_add(demuxer, INFOT_DATE, &text[2]); + demuxer->info().add( INFOT_DATE, &text[2]); break; case MOV_FOURCC(0xa9,'f','m','t'): MSG_V(" Format: %s\n", &text[2]); Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -411,7 +411,7 @@ str=new char [len]; stream_read(s,str,len); sub_data.cp=nls_get_screen_cp(); - demux_info_add(demuxer,infot,nls_recode2screen_cp(codepage,str,len)); + demuxer->info().add(infot,nls_recode2screen_cp(codepage,str,len)); delete str; } else stream_skip(s,len); Modified: mplayerxp/libmpdemux/demux_real.cpp =================================================================== --- mplayerxp/libmpdemux/demux_real.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_real.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -885,7 +885,7 @@ buf = new char [len+1]; stream_read(demuxer->stream, buf, len); buf[len] = 0; - demux_info_add(demuxer, INFOT_NAME, buf); + demuxer->info().add( INFOT_NAME, buf); delete buf; } @@ -895,7 +895,7 @@ buf = new char [len+1]; stream_read(demuxer->stream, buf, len); buf[len] = 0; - demux_info_add(demuxer, INFOT_AUTHOR, buf); + demuxer->info().add( INFOT_AUTHOR, buf); delete buf; } @@ -905,7 +905,7 @@ buf = new char [len+1]; stream_read(demuxer->stream, buf, len); buf[len] = 0; - demux_info_add(demuxer, INFOT_COPYRIGHT, buf); + demuxer->info().add( INFOT_COPYRIGHT, buf); delete buf; } @@ -915,7 +915,7 @@ buf = new char [len+1]; stream_read(demuxer->stream, buf, len); buf[len] = 0; - demux_info_add(demuxer, INFOT_COMMENTS, buf); + demuxer->info().add( INFOT_COMMENTS, buf); delete buf; } break; @@ -944,13 +944,13 @@ tmp=stream_read_char(demuxer->stream); stream_read(demuxer->stream,tmps,tmp); tmps[tmp]=0; - if(!demux_info_get(demuxer, INFOT_DESCRIPTION)) - demux_info_add(demuxer, INFOT_DESCRIPTION, tmps); + if(!demuxer->info().get(INFOT_DESCRIPTION)) + demuxer->info().add( INFOT_DESCRIPTION, tmps); tmp=stream_read_char(demuxer->stream); stream_read(demuxer->stream,tmps,tmp); tmps[tmp]=0; - if(!demux_info_get(demuxer, INFOT_MIME)) - demux_info_add(demuxer, INFOT_MIME, tmps); + if(!demuxer->info().get(INFOT_MIME)) + demuxer->info().add( INFOT_MIME, tmps); /* Type specific header */ codec_data_size = stream_read_dword(demuxer->stream); @@ -1002,21 +1002,21 @@ buft = new char [i+1]; stream_read(demuxer->stream, buft, i); buft[i] = 0; - demux_info_add(demuxer, INFOT_NAME, buft); + demuxer->info().add( INFOT_NAME, buft); delete buft; } if ((i = stream_read_char(demuxer->stream)) != 0) { buft = new char [i+1]; stream_read(demuxer->stream, buft, i); buft[i] = 0; - demux_info_add(demuxer, INFOT_AUTHOR, buft); + demuxer->info().add( INFOT_AUTHOR, buft); delete buft; } if ((i = stream_read_char(demuxer->stream)) != 0) { buft = new char [i+1]; stream_read(demuxer->stream, buft, i); buft[i] = 0; - demux_info_add(demuxer, INFOT_COPYRIGHT, buft); + demuxer->info().add( INFOT_COPYRIGHT, buft); delete buft; } if ((i = stream_read_char(demuxer->stream)) != 0) Modified: mplayerxp/libmpdemux/demux_realaud.cpp =================================================================== --- mplayerxp/libmpdemux/demux_realaud.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_realaud.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -167,28 +167,28 @@ buf = new char [i+1]; stream_read(demuxer->stream, buf, i); buf[i] = 0; - demux_info_add(demuxer, INFOT_NAME, buf); + demuxer->info().add( INFOT_NAME, buf); delete buf; } if ((i = stream_read_char(demuxer->stream)) != 0) { buf = new char [i+1]; stream_read(demuxer->stream, buf, i); buf[i] = 0; - demux_info_add(demuxer, INFOT_AUTHOR, buf); + demuxer->info().add( INFOT_AUTHOR, buf); delete buf; } if ((i = stream_read_char(demuxer->stream)) != 0) { buf = new char [i+1]; stream_read(demuxer->stream, buf, i); buf[i] = 0; - demux_info_add(demuxer, INFOT_COPYRIGHT, buf); + demuxer->info().add( INFOT_COPYRIGHT, buf); delete buf; } if ((i = stream_read_char(demuxer->stream)) != 0) { buf = new char [i+1]; stream_read(demuxer->stream, buf, i); buf[i] = 0; - demux_info_add(demuxer, INFOT_COMMENTS, buf); + demuxer->info().add( INFOT_COMMENTS, buf); delete buf; } Modified: mplayerxp/libmpdemux/demux_viv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_viv.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_viv.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -242,22 +242,22 @@ /* only for displaying some informations about movie*/ if (!strcmp(opt, "Title")) { - demux_info_add(demux, INFOT_NAME, param); + demux->info().add( INFOT_NAME, param); priv->title = mp_strdup(param); } if (!strcmp(opt, "Author")) { - demux_info_add(demux, INFOT_AUTHOR, param); + demux->info().add( INFOT_AUTHOR, param); priv->author = mp_strdup(param); } if (!strcmp(opt, "Copyright")) { - demux_info_add(demux, INFOT_COPYRIGHT, param); + demux->info().add( INFOT_COPYRIGHT, param); priv->copyright = mp_strdup(param); } if (!strcmp(opt, "Producer")) { - demux_info_add(demux, INFOT_ENCODER, param); + demux->info().add( INFOT_ENCODER, param); priv->producer = mp_strdup(param); } Modified: mplayerxp/libmpdemux/demux_vqf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_vqf.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demux_vqf.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -126,25 +126,25 @@ if(sid==mmioFOURCC('N','A','M','E')) { memcpy(hi->Name,sdata,std::min(unsigned(BUFSIZ),slen)); - demux_info_add(demuxer,INFOT_NAME,sdata); + demuxer->info().add(INFOT_NAME,sdata); } else if(sid==mmioFOURCC('A','U','T','H')) { memcpy(hi->Auth,sdata,std::min(unsigned(BUFSIZ),slen)); - demux_info_add(demuxer,INFOT_AUTHOR,sdata); + demuxer->info().add(INFOT_AUTHOR,sdata); } else if(sid==mmioFOURCC('C','O','M','T')) { memcpy(hi->Comt,sdata,std::min(unsigned(BUFSIZ),slen)); - demux_info_add(demuxer,INFOT_COMMENTS,sdata); + demuxer->info().add(INFOT_COMMENTS,sdata); } else if(sid==mmioFOURCC('(','c',')',' ')) { memcpy(hi->Cpyr,sdata,std::min(unsigned(BUFSIZ),slen)); - demux_info_add(demuxer,INFOT_COPYRIGHT,sdata); + demuxer->info().add(INFOT_COPYRIGHT,sdata); } else if(sid==mmioFOURCC('F','I','L','E')) @@ -152,13 +152,13 @@ memcpy(hi->File,sdata,std::min(unsigned(BUFSIZ),slen)); } else - if(sid==mmioFOURCC('A','L','B','M')) demux_info_add(demuxer,INFOT_ALBUM,sdata); + if(sid==mmioFOURCC('A','L','B','M')) demuxer->info().add(INFOT_ALBUM,sdata); else - if(sid==mmioFOURCC('Y','E','A','R')) demux_info_add(demuxer,INFOT_DATE,sdata); + if(sid==mmioFOURCC('Y','E','A','R')) demuxer->info().add(INFOT_DATE,sdata); else - if(sid==mmioFOURCC('T','R','A','C')) demux_info_add(demuxer,INFOT_TRACK,sdata); + if(sid==mmioFOURCC('T','R','A','C')) demuxer->info().add(INFOT_TRACK,sdata); else - if(sid==mmioFOURCC('E','N','C','D')) demux_info_add(demuxer,INFOT_ENCODER,sdata); + if(sid==mmioFOURCC('E','N','C','D')) demuxer->info().add(INFOT_ENCODER,sdata); else MSG_V("Unhandled subchunk '%c%c%c%c'='%s'\n",((char *)&sid)[0],((char *)&sid)[1],((char *)&sid)[2],((char *)&sid)[3],sdata); /* other stuff is unrecognized due untranslatable japan's idiomatics */ Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -15,8 +15,6 @@ #include "libmpsub/subreader.h" #include "libmpconf/cfgparser.h" -#include "nls/nls.h" - #include "osdep/fastmemcpy.h" #include "libvo/sub.h" #include "libao2/afmt.h" @@ -92,10 +90,6 @@ NULL }; -struct demuxer_info_t { - char *id[INFOT_MAX]; -}; - void libmpdemux_register_options(m_config_t* cfg) { unsigned i; @@ -120,12 +114,18 @@ d->audio=new(zeromem) Demuxer_Stream(d,a_id); d->video=new(zeromem) Demuxer_Stream(d,v_id); d->sub=new(zeromem) Demuxer_Stream(d,s_id); - d->info=new(zeromem) demuxer_info_t; stream_reset(stream); stream_seek(stream,stream->start_pos); return d; } +demuxer_t::demuxer_t() + :_info(new(zeromem) Demuxer_Info) +{ +} + +demuxer_t::~demuxer_t() {} + sh_audio_t *get_sh_audio(demuxer_t *demuxer, int id) { if(id > MAX_A_STREAMS-1 || id < 0) { @@ -216,7 +216,6 @@ delete demuxer->audio; demuxer->audio=NULL; delete demuxer->video; demuxer->video=NULL; delete demuxer->sub; demuxer->sub=NULL; - demux_info_free(demuxer); delete demuxer; } } @@ -320,10 +319,10 @@ demuxer=new_demux; MSG_OK("Using: %s\n",demuxer->driver->name); for(i=0;i<sizeof(stream_txt_ids)/sizeof(struct s_stream_txt_ids);i++) - if(!demux_info_get(demuxer,stream_txt_ids[i].demuxer_id)) { + if(!demuxer->info().get(stream_txt_ids[i].demuxer_id)) { char stream_name[256]; if(stream_control(demuxer->stream,stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { - demux_info_add(demuxer,stream_txt_ids[i].demuxer_id,stream_name); + demuxer->info().add(stream_txt_ids[i].demuxer_id,stream_name); } } stream->demuxer=demuxer; @@ -412,72 +411,6 @@ return 1; } -static const char *info_names[INFOT_MAX] = -{ - "Author", - "Name", - "Subject", - "Copyright", - "Description", - "Album", - "Date", - "Track", - "Genre", - "Encoder", - "SrcMedia", - "WWW", - "Mail", - "Rating", - "Comments", - "Mime" -}; - -int demux_info_add(demuxer_t *demuxer, unsigned opt, const char *param) -{ - if(!opt || opt > INFOT_MAX) - { - MSG_WARN("Unknown info type %u\n",opt); - return 0; - } - opt--; - check_pin("demuxer",demuxer->pin,DEMUX_PIN); - if(demuxer->info->id[opt]) - { - MSG_V( "Demuxer info '%s' already present as '%s'!\n",info_names[opt],demuxer->info->id[opt]); - delete demuxer->info->id[opt]; - } - demuxer->info->id[opt]=nls_recode2screen_cp(sub_data.cp,param,strlen(param)); - return 1; -} - -int demux_info_print(const demuxer_t *demuxer,const char *filename) -{ - unsigned i; - MSG_HINT(" CLIP INFO (%s):\n",filename); - for(i=0;i<INFOT_MAX;i++) - if(demuxer->info->id[i]) - MSG_HINT(" %s: %s\n",info_names[i],demuxer->info->id[i]); - return 0; -} - -void demux_info_free(demuxer_t* demuxer) -{ - unsigned i; - if(demuxer->info) - { - demuxer_info_t*dinfo = demuxer->info; - for(i=0;i<INFOT_MAX;i++) - if(dinfo->id[i]) - delete dinfo->id[i]; - delete dinfo; - } -} - -const char* demux_info_get(const demuxer_t *demuxer, unsigned opt) { - if(!opt || opt > INFOT_MAX) return NULL; - return demuxer->info->id[opt-1]; -} - /******************* Options stuff **********************/ static const config_t demux_opts[] = { Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/demuxer.h 2012-12-04 13:56:44 UTC (rev 507) @@ -5,6 +5,7 @@ #include "libmpconf/cfgparser.h" #include "demuxer_packet.h" #include "demuxer_stream.h" +#include "demuxer_info.h" #define MAX_PACK_BYTES (0x1024*0x1024*4) enum { @@ -69,13 +70,14 @@ DEMUX_PIN=RND_NUMBER2+RND_CHAR2 }; -struct demuxer_info_t; struct demuxer_driver_t; struct demuxer_t : public Opaque { public: - demuxer_t() {} - virtual ~demuxer_t() {} + demuxer_t(); + virtual ~demuxer_t(); + Demuxer_Info& info() const { return *_info; } + char antiviral_hole[RND_CHAR3]; unsigned pin; /**< personal identification number */ stream_t* stream; /**< stream for movie reading */ @@ -94,9 +96,10 @@ int synced; /**< indicates stream synchronisation. TODO: mpg->priv */ Opaque* priv; /**< private data of demuxer's driver.*/ - demuxer_info_t* info; /**< human-readable info from stream/movie (like movie name,author,duration)*/ const demuxer_driver_t* driver; /**< driver associated with this demuxer */ -} __attribute__ ((packed)); + private: + LocalPtr<Demuxer_Info> _info; /**< human-readable info from stream/movie (like movie name,author,duration)*/ +}; enum { DEMUX_SEEK_CUR =0x00, @@ -129,30 +132,6 @@ /* AVI demuxer params: */ extern int index_mode; /**< -1=untouched 0=don't use index 1=use (geneate) index */ -enum { - INFOT_NULL =0, - INFOT_AUTHOR =1, - INFOT_NAME =2, - INFOT_SUBJECT =3, - INFOT_COPYRIGHT =4, - INFOT_DESCRIPTION =5, - INFOT_ALBUM =6, - INFOT_DATE =7, - INFOT_TRACK =8, - INFOT_GENRE =9, - INFOT_ENCODER =10, - INFOT_SOURCE_MEDIA =11, - INFOT_WWW =12, - INFOT_MAIL =13, - INFOT_RATING =14, - INFOT_COMMENTS =15, - INFOT_MIME =16, - INFOT_MAX =16 -}; -int demux_info_add(demuxer_t *demuxer, unsigned opt, const char *param); -const char* demux_info_get(const demuxer_t *demuxer, unsigned opt); -int demux_info_print(const demuxer_t *demuxer,const char *filename); -void demux_info_free(demuxer_t *demuxer); extern int demuxer_switch_audio(const demuxer_t *, int id); extern int demuxer_switch_video(const demuxer_t *, int id); Added: mplayerxp/libmpdemux/demuxer_info.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_info.cpp (rev 0) +++ mplayerxp/libmpdemux/demuxer_info.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -0,0 +1,66 @@ +#include "demuxer_info.h" + +#include "nls/nls.h" + +#include "demux_msg.h" + + +namespace mpxp { +static const char *info_names[INFOT_MAX] = +{ + "Author", + "Name", + "Subject", + "Copyright", + "Description", + "Album", + "Date", + "Track", + "Genre", + "Encoder", + "SrcMedia", + "WWW", + "Mail", + "Rating", + "Comments", + "Mime" +}; + +Demuxer_Info::Demuxer_Info() {} +Demuxer_Info::~Demuxer_Info() { + unsigned i; + for(i=0;i<INFOT_MAX;i++) + if(id[i]) + delete id[i]; +} + +MPXP_Rc Demuxer_Info::add(unsigned opt, const char *param) +{ + if(!opt || opt > INFOT_MAX) { + MSG_WARN("Unknown info type %u\n",opt); + return MPXP_False; + } + opt--; + if(id[opt]) { + MSG_V( "Demuxer info '%s' already present as '%s'!\n",info_names[opt],id[opt]); + delete id[opt]; + } + id[opt]=nls_recode2screen_cp(sub_data.cp,param,strlen(param)); + return MPXP_Ok; +} + +int Demuxer_Info::print(const char *filename) const +{ + unsigned i; + MSG_HINT(" CLIP INFO (%s):\n",filename); + for(i=0;i<INFOT_MAX;i++) + if(id[i]) + MSG_HINT(" %s: %s\n",info_names[i],id[i]); + return 0; +} + +const char* Demuxer_Info::get(unsigned opt) const { + if(!opt || opt > INFOT_MAX) return NULL; + return id[opt-1]; +} +} // namespaec mpxp; Property changes on: mplayerxp/libmpdemux/demuxer_info.cpp ___________________________________________________________________ Added: svn:eol-style + native Added: mplayerxp/libmpdemux/demuxer_info.h =================================================================== --- mplayerxp/libmpdemux/demuxer_info.h (rev 0) +++ mplayerxp/libmpdemux/demuxer_info.h 2012-12-04 13:56:44 UTC (rev 507) @@ -0,0 +1,43 @@ +#ifndef __DEMUXER_INFO_H_INCLUDED +#define __DEMUXER_INFO_H_INCLUDED 1 +#include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; +#include "xmpcore/xmp_enums.h" + +namespace mpxp { + enum { + INFOT_NULL =0, + INFOT_AUTHOR =1, + INFOT_NAME =2, + INFOT_SUBJECT =3, + INFOT_COPYRIGHT =4, + INFOT_DESCRIPTION =5, + INFOT_ALBUM =6, + INFOT_DATE =7, + INFOT_TRACK =8, + INFOT_GENRE =9, + INFOT_ENCODER =10, + INFOT_SOURCE_MEDIA =11, + INFOT_WWW =12, + INFOT_MAIL =13, + INFOT_RATING =14, + INFOT_COMMENTS =15, + INFOT_MIME =16, + INFOT_MAX =16 + }; + + struct Demuxer_Info : public Opaque { + public: + Demuxer_Info(); + virtual ~Demuxer_Info(); + + MPXP_Rc add(unsigned opt, const char *param); + const char* get(unsigned opt) const; + int print(const char *filename) const; + + private: + char *id[INFOT_MAX]; + }; +} // namespace mpxp +#endif Property changes on: mplayerxp/libmpdemux/demuxer_info.h ___________________________________________________________________ Added: svn:eol-style + native Modified: mplayerxp/libmpdemux/mux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/mux_mpxp64.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/libmpdemux/mux_mpxp64.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -210,37 +210,37 @@ const char *sname; fpos=mpxpav64_open_header32(f,"FCNT"); #ifdef USE_ICONV - if((sname=demux_info_get(dinfo,INFOT_AUTHOR))!=NULL) + if((sname=dinfo->info().get(INFOT_AUTHOR))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"AUTH",sname); - if((sname=demux_info_get(dinfo,INFOT_NAME))!=NULL) + if((sname=dinfo->info().get(INFOT_NAME))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"NAME",sname); - if((sname=demux_info_get(dinfo,INFOT_SUBJECT))!=NULL) + if((sname=dinfo->info().get(INFOT_SUBJECT))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"SUBJ",sname); - if((sname=demux_info_get(dinfo,INFOT_COPYRIGHT))!=NULL) + if((sname=dinfo->info().get(INFOT_COPYRIGHT))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"CPYR",sname); - if((sname=demux_info_get(dinfo,INFOT_DESCRIPTION))!=NULL) + if((sname=dinfo->info().get(INFOT_DESCRIPTION))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"DESC",sname); - if((sname=demux_info_get(dinfo,INFOT_ALBUM))!=NULL) + if((sname=dinfo->info().get(INFOT_ALBUM))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"ALBM",sname); - if((sname=demux_info_get(dinfo,INFOT_DATE))!=NULL) + if((sname=dinfo->info().get(INFOT_DATE))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"CRDT",sname); - if((sname=demux_info_get(dinfo,INFOT_TRACK))!=NULL) + if((sname=dinfo->info().get(INFOT_TRACK))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"TRCK",sname); - if((sname=demux_info_get(dinfo,INFOT_GENRE))!=NULL) + if((sname=dinfo->info().get(INFOT_GENRE))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"GENR",sname); - if((sname=demux_info_get(dinfo,INFOT_ENCODER))!=NULL) + if((sname=dinfo->info().get(INFOT_ENCODER))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"SOFT",sname); - if((sname=demux_info_get(dinfo,INFOT_SOURCE_MEDIA))!=NULL) + if((sname=dinfo->info().get(INFOT_SOURCE_MEDIA))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"SRCM",sname); - if((sname=demux_info_get(dinfo,INFOT_WWW))!=NULL) + if((sname=dinfo->info().get(INFOT_WWW))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"IURL",sname); - if((sname=demux_info_get(dinfo,INFOT_MAIL))!=NULL) + if((sname=dinfo->info().get(INFOT_MAIL))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"MAIL",sname); - if((sname=demux_info_get(dinfo,INFOT_RATING))!=NULL) + if((sname=dinfo->info().get(INFOT_RATING))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"RATE",sname); - if((sname=demux_info_get(dinfo,INFOT_COMMENTS))!=NULL) + if((sname=dinfo->info().get(INFOT_COMMENTS))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"CMTS",sname); - if((sname=demux_info_get(dinfo,INFOT_MIME))!=NULL) + if((sname=dinfo->info().get(INFOT_MIME))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"MIME",sname); #endif mpxpav64_close_header32(f,fpos); Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-04 12:35:59 UTC (rev 506) +++ mplayerxp/mplayerxp.cpp 2012-12-04 13:56:44 UTC (rev 507) @@ -2002,7 +2002,7 @@ if(mp_conf.benchmark) init_benchmark(); /* display clip info */ - demux_info_print(MPXPSys.demuxer(),filename); + MPXPSys.demuxer()->info().print(filename); // TODO: rewrite test backtrace in .asm // mpxp_test_backtrace(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-05 09:25:31
|
Revision: 510 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=510&view=rev Author: nickols_k Date: 2012-12-05 09:25:22 +0000 (Wed, 05 Dec 2012) Log Message: ----------- more private data About illegal patch: Thinking about substitution of g++ long-names of functions i guess that malefactor(s) substitute(d) content of glibc. Symbol resolving during program linking in memory performed by ld.so because libdl.so calls some functions (line: _dl_sym) directly from loader. But what us tells 'ldd --version' utility? ldd (GNU libc) 2.16 Copyright (C) 2012 Free Software Foundation, Inc. It tells us that ldd is part of GLIBC. Therefore, ld.so is part of GLIBC too. Thus obviously, that malefactor(s) substitute(d) part of glibc content. Modified Paths: -------------- mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpdemux/demux_dv.cpp mplayerxp/libmpdemux/demux_film.cpp mplayerxp/libmpdemux/demux_fli.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mkv.cpp mplayerxp/libmpdemux/demux_mov.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_nsv.cpp mplayerxp/libmpdemux/demux_null.cpp mplayerxp/libmpdemux/demux_nuv.cpp mplayerxp/libmpdemux/demux_ogg.cpp mplayerxp/libmpdemux/demux_pva.cpp mplayerxp/libmpdemux/demux_rawaudio.cpp mplayerxp/libmpdemux/demux_rawvideo.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_realaud.cpp mplayerxp/libmpdemux/demux_roq.cpp mplayerxp/libmpdemux/demux_smjpeg.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demux_viv.cpp mplayerxp/libmpdemux/demux_vqf.cpp mplayerxp/libmpdemux/demux_y4m.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/libmpdemux/demuxer_internal.h mplayerxp/libmpdemux/demuxer_stream.cpp mplayerxp/mplayerxp.cpp mplayerxp/nls/help_mp-en.h Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -51,7 +51,7 @@ return MPXP_False; } -static Demuxer* aiff_open(Demuxer* demuxer) { +static Opaque* aiff_open(Demuxer* demuxer) { sh_audio_t* sh_audio; WAVEFORMATEX* w; stream_t *s; @@ -60,7 +60,7 @@ s = demuxer->stream; sh_audio = demuxer->new_sh_audio(); - demuxer->priv=priv=new(zeromem) priv_t; + priv=new(zeromem) priv_t; sh_audio->wf = w = new(zeromem) WAVEFORMATEX; w->wFormatTag = 0x1; sh_audio->wtag = mmioFOURCC('r','a','w',' '); /* S16BE */ w->nChannels = sh_audio->nch = @@ -181,7 +181,7 @@ demuxer->audio->sh = sh_audio; sh_audio->ds = demuxer->audio; stream_seek(s,demuxer->movi_start); - return demuxer; + return priv; } static int aiff_demux(Demuxer* demuxer, Demuxer_Stream *ds) { Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -154,7 +154,7 @@ return MPXP_Ok; } -static Demuxer* asf_open(Demuxer *demuxer){ +static Opaque* asf_open(Demuxer *demuxer){ static unsigned char buffer[2048]; uint32_t* streams = NULL; int audio_streams=0; @@ -344,10 +344,10 @@ for(i = 0; i < stream_count; i++) { uint32_t id = streams[2*i]; uint32_t rate = streams[2*i+1]; - if(demuxer->v_streams[id] && rate > vr) { + if(demuxer->get_sh_video(id) && rate > vr) { vr = rate; best_video = id; - } else if(demuxer->a_streams[id] && rate > ar) { + } else if(demuxer->get_sh_audio(id) && rate > ar) { ar = rate; best_audio = id; } @@ -400,7 +400,7 @@ } } check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return apriv; } // based on asf file-wtag doc by Eugene [http://divx.euro.ru] @@ -429,18 +429,18 @@ MSG_DBG3("demux_asf.read_packet: id=%d seq=%d len=%d time=%u dur=%u offs=%i key=%i\n",id,seq,len,time,dur,offs,keyframe); if(demux->video->id==-1) - if(demux->v_streams[id]) + if(demux->get_sh_video(id)) demux->video->id=id; if(demux->audio->id==-1) - if(demux->a_streams[id]) + if(demux->get_sh_audio(id)) demux->audio->id=id; if(id==demux->audio->id){ // audio ds=demux->audio; if(!ds->sh){ - ds->sh=demux->a_streams[id]; + ds->sh=demux->get_sh_audio(id); MSG_V("Auto-selected ASF audio ID = %d\n",ds->id); } } else @@ -448,7 +448,7 @@ // video ds=demux->video; if(!ds->sh){ - ds->sh=demux->v_streams[id]; + ds->sh=demux->get_sh_video(id); MSG_V("Auto-selected ASF video ID = %d\n",ds->id); } } Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -864,7 +864,7 @@ extern const demuxer_driver_t demux_audio; -static Demuxer* audio_open(Demuxer* demuxer) { +static Opaque* audio_open(Demuxer* demuxer) { stream_t *s; sh_audio_t* sh_audio; uint8_t hdr[HDR_SIZE]; @@ -1372,7 +1372,7 @@ if(demuxer->movi_length==UINT_MAX && sh_audio->i_bps) demuxer->movi_length=(unsigned)(((float)demuxer->movi_end-(float)demuxer->movi_start)/(float)sh_audio->i_bps); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static uint32_t mpc_get_bits(da_priv_t* priv, stream_t* s, int bits) { Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -767,18 +767,18 @@ int stream_id=avi_stream_id(id); if(demux->video->id==-1) - if(demux->v_streams[stream_id]) + if(demux->get_sh_video(stream_id)) demux->video->id=stream_id; if(demux->audio->id==-1) - if(demux->a_streams[stream_id]) + if(demux->get_sh_audio(stream_id)) demux->audio->id=stream_id; if(stream_id==demux->audio->id){ if(!demux->audio->sh){ sh_audio_t* sh; avi_priv_t *priv=static_cast<avi_priv_t*>(demux->priv); - demux->audio->sh=sh=reinterpret_cast<sh_audio_t*>(demux->a_streams[stream_id]); + demux->audio->sh=sh=demux->get_sh_audio(stream_id); MSG_V("Auto-selected AVI audio ID = %d\n",demux->audio->id); if(sh->wf){ priv->audio_block_size=sh->wf->nBlockAlign; @@ -804,7 +804,7 @@ } if(stream_id==demux->video->id){ if(!demux->video->sh){ - demux->video->sh=demux->v_streams[stream_id]; + demux->video->sh=demux->get_sh_video(stream_id); MSG_V("Auto-selected AVI video ID = %d\n",demux->video->id); } return demux->video; @@ -1130,7 +1130,7 @@ int index_mode=-1; // -1=untouched 0=don't use index 1=use (geneate) index extern demuxer_driver_t demux_ogg; -static Demuxer* avi_open(Demuxer* demuxer){ +static Opaque* avi_open(Demuxer* demuxer){ Demuxer_Stream *d_audio=demuxer->audio; Demuxer_Stream *d_video=demuxer->video; sh_audio_t *sh_audio=NULL; @@ -1143,11 +1143,11 @@ //---- AVI header: read_avi_header(demuxer,(demuxer->stream->type&STREAMTYPE_SEEKABLE)?index_mode:-2); - if(demuxer->audio->id>=0 && !demuxer->a_streams[demuxer->audio->id]){ + if(demuxer->audio->id>=0 && !demuxer->get_sh_audio(demuxer->audio->id)){ MSG_WARN("AVI: invalid audio stream ID: %d - ignoring (nosound)\n",demuxer->audio->id); demuxer->audio->id=-2; // disabled } - if(demuxer->video->id>=0 && !demuxer->v_streams[demuxer->video->id]){ + if(demuxer->video->id>=0 && !demuxer->get_sh_video(demuxer->video->id)){ MSG_WARN("AVI: invalid video stream ID: %d - ignoring (using default)\n",demuxer->video->id); demuxer->video->id=-1; // autodetect } @@ -1281,7 +1281,7 @@ sh_video->bih->biBitCount, sh_video->fps); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static void avi_seek(Demuxer *demuxer,const seek_args_t* seeka){ Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -142,7 +142,7 @@ return 1; } -static Demuxer* bmp_open(Demuxer* demuxer) +static Opaque* bmp_open(Demuxer* demuxer) { sh_video_t *sh_video = NULL; unsigned npal_colors; @@ -188,7 +188,7 @@ // demuxer->priv = bmp_image; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return NULL; } static void bmp_close(Demuxer* demuxer) @@ -232,7 +232,7 @@ return 1; } -static Demuxer* bmp_open(Demuxer* demuxer) +static Opaque* bmp_open(Demuxer* demuxer) { sh_video_t *sh_video = NULL; unsigned int filesize; @@ -290,9 +290,7 @@ sh_video->is_static = 1; sh_video->fps = 1; - demuxer->priv = bmp_image; - - return demuxer; + return bmp_image; } static void bmp_close(Demuxer* demuxer) { Modified: mplayerxp/libmpdemux/demux_dv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_dv.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_dv.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -135,7 +135,7 @@ return 1; } -static Demuxer* dv_open(Demuxer* demuxer) +static Opaque* dv_open(Demuxer* demuxer) { unsigned char dv_frame[DV_PAL_FRAME_SIZE]; sh_video_t *sh_video = NULL; @@ -223,9 +223,8 @@ stream_reset(demuxer->stream); stream_seek(demuxer->stream, 0); dv_decoder_free(dv_decoder); //we keep this in the context of both stream headers - demuxer->priv=frames; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return frames; } static void dv_close(Demuxer* demuxer) Modified: mplayerxp/libmpdemux/demux_film.cpp =================================================================== --- mplayerxp/libmpdemux/demux_film.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_film.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -205,7 +205,7 @@ return MPXP_Ok; } -static Demuxer* film_open(Demuxer* demuxer) +static Opaque* film_open(Demuxer* demuxer) { sh_video_t *sh_video = NULL; sh_audio_t *sh_audio = NULL; @@ -432,7 +432,7 @@ demuxer->priv = film_data; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return film_data; } static void film_close(Demuxer* demuxer) { Modified: mplayerxp/libmpdemux/demux_fli.cpp =================================================================== --- mplayerxp/libmpdemux/demux_fli.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_fli.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -84,7 +84,7 @@ return MPXP_Ok; } -static Demuxer* fli_open(Demuxer* demuxer){ +static Opaque* fli_open(Demuxer* demuxer){ sh_video_t *sh_video = NULL; fli_frames_t *frames = new(zeromem) fli_frames_t; int frame_number; @@ -182,9 +182,8 @@ // save the actual number of frames indexed frames->num_frames = frame_number; - demuxer->priv = frames; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return frames; } static void fli_close(Demuxer* demuxer) { Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -227,7 +227,7 @@ return MPXP_Ok; } -static Demuxer* lavf_open(Demuxer *demuxer){ +static Opaque* lavf_open(Demuxer *demuxer){ AVFormatContext *avfc; lavf_priv_t *priv= static_cast<lavf_priv_t*>(demuxer->priv); unsigned j; @@ -341,7 +341,7 @@ st->discard= AVDISCARD_ALL; else{ demuxer->audio->id = i; - demuxer->audio->sh= demuxer->a_streams[i]; + demuxer->audio->sh= demuxer->get_sh_audio(i); } break;} case AVMEDIA_TYPE_VIDEO:{ @@ -390,7 +390,7 @@ st->discard= AVDISCARD_ALL; else{ demuxer->video->id = i; - demuxer->video->sh= demuxer->v_streams[i]; + demuxer->video->sh= demuxer->get_sh_video(i); } break;} default: @@ -410,7 +410,7 @@ demuxer->video->id=-2; // audio-only } //else if (best_video > 0 && demuxer->video->id == -1) demuxer->video->id = best_video; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static int lavf_demux(Demuxer *demux, Demuxer_Stream *dsds){ @@ -438,14 +438,14 @@ // audio ds=demux->audio; if(!ds->sh){ - ds->sh=demux->a_streams[id]; + ds->sh=demux->get_sh_audio(id); MSG_V("Auto-selected LAVF audio ID = %d\n",ds->id); } } else if(id==demux->video->id){ // video ds=demux->video; if(!ds->sh){ - ds->sh=demux->v_streams[id]; + ds->sh=demux->get_sh_video(id); MSG_V("Auto-selected LAVF video ID = %d\n",ds->id); } } else { Modified: mplayerxp/libmpdemux/demux_mkv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mkv.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_mkv.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -2437,9 +2437,6 @@ { MSG_WARN("[mkv] Unknown/unsupported audio codec ID '%s' for track %u or missing/faulty\n[mkv] private codec data.\n", track->codec_id, track->tnum); - - delete demuxer->a_streams[track->tnum]; - demuxer->a_streams[track->tnum]=0; return 1; } } @@ -2655,8 +2652,6 @@ { /* do nothing, still works */ } else if (!track->ms_compat || (track->private_size < sizeof(WAVEFORMATEX))) { - delete demuxer->a_streams[track->tnum]; - demuxer->a_streams[track->tnum]=0; return 1; } @@ -2806,7 +2801,7 @@ return MPXP_Ok; } -static Demuxer* mkv_open (Demuxer *demuxer) +static Opaque* mkv_open(Demuxer *demuxer) { stream_t *s = demuxer->stream; mkv_demuxer_t *mkv_d; @@ -2938,11 +2933,11 @@ track = demux_mkv_find_track_by_num (mkv_d, demuxer->video->id, MATROSKA_TRACK_VIDEO); - if (track && demuxer->v_streams[track->tnum]) + if (track && demuxer->get_sh_video(track->tnum)) { MSG_V("[mkv] Will play video track %u.\n", track->tnum); demuxer->video->id = track->tnum; - demuxer->video->sh = demuxer->v_streams[track->tnum]; + demuxer->video->sh = demuxer->get_sh_video(track->tnum); } else { @@ -2982,10 +2977,10 @@ else if (demuxer->audio->id != -2) /* -2 = no audio at all */ track = demux_mkv_find_track_by_num (mkv_d, demuxer->audio->id, MATROSKA_TRACK_AUDIO); - if (track && demuxer->a_streams[track->tnum]) + if (track && demuxer->get_sh_audio(track->tnum)) { demuxer->audio->id = track->tnum; - demuxer->audio->sh = demuxer->a_streams[track->tnum]; + demuxer->audio->sh = demuxer->get_sh_audio(track->tnum); } else { @@ -2999,7 +2994,7 @@ { if(mkv_d->tracks[i]->type != MATROSKA_TRACK_AUDIO) continue; - if(demuxer->a_streams[track->tnum]) + if(demuxer->get_sh_audio(track->tnum)) { mkv_d->last_aid++; if(mkv_d->last_aid == MAX_A_STREAMS) @@ -3071,7 +3066,7 @@ } } check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return mkv_d; } static void mkv_close (Demuxer *demuxer) @@ -3999,14 +3994,14 @@ #endif case Demuxer::Switch_Audio: if (demuxer->audio && demuxer->audio->sh) { - sh_audio_t *sh = reinterpret_cast<sh_audio_t*>(demuxer->a_streams[demuxer->audio->id]); + sh_audio_t *sh = demuxer->get_sh_audio(demuxer->audio->id); int aid = *(int*)arg; if (aid < 0) aid = (sh->id + 1) % mkv_d->last_aid; if (aid != sh->id) { mkv_track_t *track = demux_mkv_find_track_by_num (mkv_d, aid, MATROSKA_TRACK_AUDIO); if (track) { demuxer->audio->id = track->tnum; - sh = reinterpret_cast<sh_audio_t*>(demuxer->a_streams[demuxer->audio->id]); + sh = demuxer->get_sh_audio(demuxer->audio->id); demuxer->audio->free_packs(); } } Modified: mplayerxp/libmpdemux/demux_mov.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mov.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_mov.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -1794,7 +1794,7 @@ return 0; } -static Demuxer* mov_open(Demuxer* demuxer){ +static Opaque* mov_open(Demuxer* demuxer){ mov_priv_t* priv=static_cast<mov_priv_t*>(demuxer->priv); int t_no; int best_a_id=-1, best_a_len=0; @@ -1817,10 +1817,10 @@ for(t_no=0;t_no<priv->track_db;t_no++){ mov_track_t* trak=priv->tracks[t_no]; int len=(trak->samplesize) ? trak->chunks_size : trak->samples_size; - if(demuxer->a_streams[t_no]){ // need audio + if(demuxer->get_sh_audio(t_no)){ // need audio if(len>best_a_len){ best_a_len=len; best_a_id=t_no; } } - if(demuxer->v_streams[t_no]){ // need video + if(demuxer->get_sh_video(t_no)){ // need video if(len>best_v_len){ best_v_len=len; best_v_id=t_no; } } } @@ -1831,7 +1831,7 @@ // setup sh pointers: if(demuxer->audio->id>=0){ - sh_audio_t* sh=reinterpret_cast<sh_audio_t*>(demuxer->a_streams[demuxer->audio->id]); + sh_audio_t* sh=demuxer->get_sh_audio(demuxer->audio->id); if(sh){ demuxer->audio->sh=sh; sh->ds=demuxer->audio; } else { @@ -1840,7 +1840,7 @@ } } if(demuxer->video->id>=0){ - sh_video_t* sh=reinterpret_cast<sh_video_t*>(demuxer->v_streams[demuxer->video->id]); + sh_video_t* sh=demuxer->get_sh_video(demuxer->video->id); if(sh){ demuxer->video->sh=sh; sh->ds=demuxer->video; } else { @@ -1912,7 +1912,7 @@ } #endif check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } /** Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -156,11 +156,11 @@ } static void new_audio_stream(Demuxer *demux, int aid){ - if(!demux->a_streams[aid]){ + if(!demux->get_sh_audio(aid)){ mpg_demuxer_t *mpg_d=static_cast<mpg_demuxer_t*>(demux->priv); sh_audio_t* sh_a; demux->new_sh_audio(aid); - sh_a = (sh_audio_t*)demux->a_streams[aid]; + sh_a = demux->get_sh_audio(aid); switch(aid & 0xE0){ // 1110 0000 b (high 3 bit: type low 5: id) case 0x00: sh_a->wtag=AUDIO_MP2;break; case 0xA0: sh_a->wtag=AUDIO_LPCM_BE;break; @@ -289,9 +289,9 @@ // subtitle: aid&=0x1F; - if(!demux->s_streams[aid]){ + if(!demux->get_sh_sub(aid)){ MSG_V("==> Found subtitle: %d\n",aid); - demux->s_streams[aid]=1; + demux->new_sh_sub(aid); } if(demux->sub->id==aid){ @@ -308,7 +308,7 @@ if(demux->audio->id==aid){ int type; ds=demux->audio; - if(!ds->sh) ds->sh=demux->a_streams[aid]; + if(!ds->sh) ds->sh=demux->get_sh_audio(aid); // READ Packet: Skip additional audio header data: c=stream_read_char(demux->stream);//num of frames type=stream_read_char(demux->stream);//startpos hi @@ -361,7 +361,7 @@ new_audio_stream(demux, aid); if(demux->audio->id==aid){ ds=demux->audio; - if(!ds->sh) ds->sh=demux->a_streams[aid]; + if(!ds->sh) ds->sh=demux->get_sh_audio(aid); if(priv && ds->sh) { sh_audio_t *sh = (sh_audio_t *)ds->sh; if(priv->es_map[id - 0x1B0]) { @@ -374,11 +374,11 @@ if(id>=0x1E0 && id<=0x1EF){ // mpeg video int aid=id-0x1E0; - if(!demux->v_streams[aid]) demux->new_sh_video(aid); + if(!demux->get_sh_video(aid)) demux->new_sh_video(aid); if(demux->video->id==-1) demux->video->id=aid; if(demux->video->id==aid){ ds=demux->video; - if(!ds->sh) ds->sh=demux->v_streams[aid]; + if(!ds->sh) ds->sh=demux->get_sh_video(aid); if(priv && ds->sh) { sh_video_t *sh = (sh_video_t *)ds->sh; if(priv->es_map[id - 0x1B0]) { @@ -760,9 +760,9 @@ demuxer->file_format==Demuxer::Type_MPEG4_ES || demuxer->file_format==Demuxer::Type_H264_ES){ /* little hack, see above! */ mpg_d->alt_demuxer=mpges_demux; - if(!demuxer->v_streams[0]) demuxer->new_sh_video(); + if(!demuxer->get_sh_video()) demuxer->new_sh_video(); if(demuxer->video->id==-1) demuxer->video->id=0; - demuxer->video->sh=demuxer->v_streams[0]; + demuxer->video->sh=demuxer->get_sh_video(); stream_seek(demuxer->stream,demuxer->stream->start_pos); return mpges_demux(demuxer,demuxer->video)?MPXP_Ok:MPXP_False; } else { @@ -785,7 +785,7 @@ return MPXP_False; } -static Demuxer* mpgps_open(Demuxer*demuxer) +static Opaque* mpgps_open(Demuxer*demuxer) { sh_video_t *sh_video=reinterpret_cast<sh_video_t*>(demuxer->video->sh); mpg_demuxer_t* mpg_d=static_cast<mpg_demuxer_t*>(demuxer->priv); @@ -806,7 +806,7 @@ } } check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return mpg_d; } static void mpgps_close(Demuxer*demuxer) @@ -831,13 +831,13 @@ } do { i = (i+1) % mpg_d->num_a_streams; - sh_a = (sh_audio_t*)demuxer->a_streams[mpg_d->a_stream_ids[i]]; + sh_a = demuxer->get_sh_audio(mpg_d->a_stream_ids[i]); } while (sh_a->wtag != sh_audio->wtag); } else { for (i = 0; i < mpg_d->num_a_streams; i++) if (*((int*)arg) == mpg_d->a_stream_ids[i]) break; if (i < mpg_d->num_a_streams) - sh_a = (sh_audio_t*)demuxer->a_streams[*((int*)arg)]; + sh_a = demuxer->get_sh_audio(*((int*)arg)); if (sh_a->wtag != sh_audio->wtag) i = mpg_d->num_a_streams; } Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -433,7 +433,7 @@ priv->prev_id=0xFFFFFFFFUL; } -static Demuxer* mpxpav64_open(Demuxer* demuxer){ +static Opaque* mpxpav64_open(Demuxer* demuxer){ stream_t *s=demuxer->stream; uint64_t id,hsize,t; uint32_t fourcc; @@ -523,7 +523,7 @@ demuxer->movi_end=demuxer->movi_start+hsize; MSG_V("Found AVDATA64 at offset %016llX bytes\n",t); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static int mpxpav64_read_packet(Demuxer *demux,unsigned id,uint64_t len,float pts,int keyframe) @@ -532,18 +532,18 @@ stream_t* s=demux->stream; if(demux->video->id==-1) - if(demux->v_streams[id]) + if(demux->get_sh_video(id)) demux->video->id=id; if(demux->audio->id==-1) - if(demux->a_streams[id]) + if(demux->get_sh_audio(id)) demux->audio->id=id; if(id==(unsigned)demux->audio->id){ // audio ds=demux->audio; if(!ds->sh){ - ds->sh=demux->a_streams[id]; + ds->sh=demux->get_sh_audio(id); MSG_V("Auto-selected MPXPAV64 audio ID = %d\n",ds->id); } } else @@ -551,7 +551,7 @@ // video ds=demux->video; if(!ds->sh){ - ds->sh=demux->v_streams[id]; + ds->sh=demux->get_sh_video(id); MSG_V("Auto-selected MPXPAV64 video ID = %d\n",ds->id); } } Modified: mplayerxp/libmpdemux/demux_nsv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nsv.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_nsv.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -142,7 +142,7 @@ } -static Demuxer* nsv_open ( Demuxer* demuxer ) +static Opaque* nsv_open( Demuxer* demuxer ) { // last 2 bytes 17 and 18 are unknown but right after that comes the length unsigned char hdr[17]; @@ -316,7 +316,7 @@ // seek to start of NSV header stream_seek(demuxer->stream,stream_tell(demuxer->stream)-17); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static MPXP_Rc nsv_probe ( Demuxer* demuxer ) Modified: mplayerxp/libmpdemux/demux_null.cpp =================================================================== --- mplayerxp/libmpdemux/demux_null.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_null.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -24,7 +24,7 @@ return MPXP_False; } -static Demuxer* null_open(Demuxer* demuxer) { +static Opaque* null_open(Demuxer* demuxer) { return NULL; } Modified: mplayerxp/libmpdemux/demux_nuv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nuv.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_nuv.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -212,8 +212,7 @@ return 1; } - -static Demuxer* nuv_open ( Demuxer* demuxer ) +static Opaque* nuv_open ( Demuxer* demuxer ) { sh_video_t *sh_video = NULL; sh_audio_t *sh_audio = NULL; @@ -296,7 +295,7 @@ priv->index_list->next = NULL; priv->current_position = priv->index_list; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static MPXP_Rc nuv_probe ( Demuxer* demuxer ) Modified: mplayerxp/libmpdemux/demux_ogg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -741,7 +741,7 @@ static void ogg_close(Demuxer* demuxer); /// Open an ogg physical stream -static Demuxer * ogg_open(Demuxer* demuxer) { +static Opaque* ogg_open(Demuxer* demuxer) { ogg_demuxer_t* ogg_d; stream_t *s; char* buf; @@ -1079,11 +1079,11 @@ } MSG_V("Ogg demuxer : found %d audio stream%s, %d video stream%s and %d text stream%s\n",n_audio,n_audio>1?"s":"",n_video,n_video>1?"s":"",ogg_d->n_text,ogg_d->n_text>1?"s":""); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return ogg_d; err_out: ogg_close(demuxer); - return 0; + return NULL; } Modified: mplayerxp/libmpdemux/demux_pva.cpp =================================================================== --- mplayerxp/libmpdemux/demux_pva.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_pva.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -128,7 +128,7 @@ } } -static Demuxer* pva_open (Demuxer * demuxer) +static Opaque* pva_open (Demuxer * demuxer) { sh_video_t* sh_video = demuxer->new_sh_video(); sh_audio_t* sh_audio = demuxer->new_sh_audio(); @@ -179,7 +179,7 @@ priv->last_video_pts=-1; priv->last_audio_pts=-1; check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static int pva_get_payload(Demuxer * d,pva_payload_t * payload); Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -43,7 +43,7 @@ return MPXP_False; } -static Demuxer* rawaudio_open(Demuxer* demuxer) { +static Opaque* rawaudio_open(Demuxer* demuxer) { unsigned samplesize; sh_audio_t* sh_audio; WAVEFORMATEX* w; Modified: mplayerxp/libmpdemux/demux_rawvideo.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -68,7 +68,7 @@ return MPXP_False; } -static Demuxer* rawvideo_open(Demuxer* demuxer) { +static Opaque* rawvideo_open(Demuxer* demuxer) { sh_video_t* sh_video; switch(priv.size_id){ Modified: mplayerxp/libmpdemux/demux_real.cpp =================================================================== --- mplayerxp/libmpdemux/demux_real.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_real.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -775,8 +775,8 @@ if(stream_id<256){ - if(demuxer->audio->id==-1 && demuxer->a_streams[stream_id]){ - sh_audio_t *sh = reinterpret_cast<sh_audio_t*>(demuxer->a_streams[stream_id]); + if(demuxer->audio->id==-1 && demuxer->get_sh_audio(stream_id)){ + sh_audio_t *sh = demuxer->get_sh_audio(stream_id); demuxer->audio->id=stream_id; sh->ds=demuxer->audio; demuxer->audio->sh=sh; @@ -784,8 +784,8 @@ goto got_audio; } - if(demuxer->video->id==-1 && demuxer->v_streams[stream_id]){ - sh_video_t *sh = reinterpret_cast<sh_video_t*>(demuxer->v_streams[stream_id]); + if(demuxer->video->id==-1 && demuxer->get_sh_video(stream_id)){ + sh_video_t *sh = demuxer->get_sh_video(stream_id); demuxer->video->id=stream_id; sh->ds=demuxer->video; demuxer->video->sh=sh; @@ -801,7 +801,7 @@ }// goto loop; } -static Demuxer* real_open(Demuxer* demuxer) +static Opaque* real_open(Demuxer* demuxer) { real_priv_t* priv = static_cast<real_priv_t*>(demuxer->priv); int num_of_headers; @@ -1488,7 +1488,7 @@ sh->src_w,sh->src_h,sh->aspect,sh->fps); } check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static void real_close(Demuxer *demuxer) Modified: mplayerxp/libmpdemux/demux_realaud.cpp =================================================================== --- mplayerxp/libmpdemux/demux_realaud.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_realaud.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -95,7 +95,7 @@ return 1; } -static Demuxer * realaud_open(Demuxer* demuxer) +static Opaque* realaud_open(Demuxer* demuxer) { realaud_priv_t* realaud_priv = static_cast<realaud_priv_t*>(demuxer->priv); sh_audio_t *sh; @@ -271,7 +271,7 @@ if(!demuxer->audio->fill_buffer()) MSG_WARN("[RealAudio] No data.\n"); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return realaud_priv; } Modified: mplayerxp/libmpdemux/demux_roq.cpp =================================================================== --- mplayerxp/libmpdemux/demux_roq.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_roq.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -99,7 +99,7 @@ return 1; } -static Demuxer* roq_open(Demuxer* demuxer) +static Opaque* roq_open(Demuxer* demuxer) { sh_video_t *sh_video = NULL; sh_audio_t *sh_audio = NULL; @@ -243,10 +243,9 @@ sh_audio->wf->nBlockAlign = largest_audio_chunk * 2; roq_data->current_chunk = 0; - demuxer->priv = roq_data; stream_reset(demuxer->stream); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return roq_data; } static void roq_close(Demuxer* demuxer) { Modified: mplayerxp/libmpdemux/demux_smjpeg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_smjpeg.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_smjpeg.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -93,7 +93,7 @@ return 1; } -static Demuxer* smjpeg_open(Demuxer* demuxer){ +static Opaque* smjpeg_open(Demuxer* demuxer){ sh_video_t* sh_video; sh_audio_t* sh_audio; unsigned int htype = 0, hleng; Modified: mplayerxp/libmpdemux/demux_ts.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ts.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_ts.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -928,7 +928,7 @@ return 1; } -static Demuxer *ts_open(Demuxer * demuxer) +static Opaque* ts_open(Demuxer* demuxer) { int i; uint8_t packet_size; @@ -1057,7 +1057,7 @@ demuxer->filepos = stream_tell(demuxer->stream); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static void ts_close(Demuxer * demuxer) Modified: mplayerxp/libmpdemux/demux_ty.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ty.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_ty.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -505,12 +505,12 @@ // Let's make a Video Demux Stream for MPlayer aid = 0x0; - if( !demux->v_streams[ aid ] ) demux->new_sh_video( aid ); + if( !demux->get_sh_video(aid)) demux->new_sh_video(aid); if( demux->video->id == -1 ) demux->video->id = aid; if( demux->video->id == aid ) { Demuxer_Stream *ds = demux->video; - if( !ds->sh ) ds->sh = demux->v_streams[ aid ]; + if( !ds->sh ) ds->sh = demux->get_sh_video(aid); } // ====================================================================== @@ -576,13 +576,13 @@ } demux->audio->id = aid; - if( !demux->a_streams[ aid ] ) demux->new_sh_audio( aid ); + if( !demux->get_sh_audio(aid) ) demux->new_sh_audio( aid ); if( demux->audio->id == aid ) { Demuxer_Stream *ds = demux->audio; if( !ds->sh ) { sh_audio_t* sh_a; - ds->sh = demux->a_streams[ aid ]; + ds->sh = demux->get_sh_audio(aid); sh_a = (sh_audio_t*)ds->sh; switch(aid & 0xE0){ // 1110 0000 b (high 3 bit: type low 5: id) case 0x00: sh_a->wtag=0x50;break; // mpeg @@ -851,7 +851,7 @@ } -static Demuxer* ty_open(Demuxer* demuxer) +static Opaque* ty_open(Demuxer* demuxer) { sh_audio_t *sh_audio=NULL; sh_video_t *sh_video=NULL; Modified: mplayerxp/libmpdemux/demux_viv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_viv.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_viv.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -572,7 +572,7 @@ return 0; } -static Demuxer* vivo_open(Demuxer* demuxer){ +static Opaque* vivo_open(Demuxer* demuxer){ vivo_priv_t* priv=static_cast<vivo_priv_t*>(demuxer->priv); if(!demuxer->video->fill_buffer()){ @@ -749,7 +749,7 @@ } } check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static void vivo_close(Demuxer *demuxer) Modified: mplayerxp/libmpdemux/demux_vqf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_vqf.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_vqf.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -49,7 +49,7 @@ return MPXP_False; } -static Demuxer* vqf_open(Demuxer* demuxer) { +static Opaque* vqf_open(Demuxer* demuxer) { sh_audio_t* sh_audio; WAVEFORMATEX* w; stream_t *s; Modified: mplayerxp/libmpdemux/demux_y4m.cpp =================================================================== --- mplayerxp/libmpdemux/demux_y4m.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demux_y4m.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -130,7 +130,7 @@ return 1; } -static Demuxer* y4m_open(Demuxer* demuxer){ +static Opaque* y4m_open(Demuxer* demuxer){ y4m_priv_t* priv = static_cast<y4m_priv_t*>(demuxer->priv); y4m_ratio_t ratio; sh_video_t* sh=demuxer->new_sh_video(); @@ -236,7 +236,7 @@ demuxer->video->id, sh->src_w, sh->src_h, sh->bih->biWidth, sh->bih->biHeight); check_pin("demuxer",demuxer->pin,DEMUX_PIN); - return demuxer; + return priv; } static void y4m_seek(Demuxer *demuxer,const seek_args_t* seeka) { Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -91,6 +91,18 @@ NULL }; + +struct demuxer_priv_t : public Opaque { + public: + demuxer_priv_t() {} + virtual ~demuxer_priv_t() {} + + sh_audio_t* a_streams[MAX_A_STREAMS]; /**< audio streams (sh_audio_t) for multilanguage movies */ + sh_video_t* v_streams[MAX_V_STREAMS]; /**< video streams (sh_video_t) for multipicture movies */ + char s_streams[MAX_S_STREAMS]; /**< DVD's subtitles (flag) streams for multilanguage movies */ + const demuxer_driver_t* driver; /**< driver associated with this demuxer */ +}; + void libmpdemux_register_options(m_config_t* cfg) { unsigned i; @@ -101,16 +113,8 @@ } } -Demuxer::Demuxer() - :_info(new(zeromem) Demuxer_Info) +void Demuxer::_init(stream_t *_stream,int a_id,int v_id,int s_id) { -} - -Demuxer::Demuxer(stream_t *_stream,int a_id,int v_id,int s_id) - :_info(new(zeromem) Demuxer_Info) -{ - fill_false_pointers(antiviral_hole,reinterpret_cast<long>(&pin)-reinterpret_cast<long>(&antiviral_hole)); - pin=DEMUX_PIN; stream=_stream; movi_start=_stream->start_pos; movi_end=_stream->end_pos; @@ -125,15 +129,33 @@ stream_seek(_stream,stream->start_pos); } +Demuxer::Demuxer() + :demuxer_priv(new(zeromem) demuxer_priv_t), + _info(new(zeromem) Demuxer_Info) +{ + fill_false_pointers(antiviral_hole,reinterpret_cast<long>(&pin)-reinterpret_cast<long>(&antiviral_hole)); + pin=DEMUX_PIN; +} + +Demuxer::Demuxer(stream_t *_stream,int a_id,int v_id,int s_id) + :demuxer_priv(new(zeromem) demuxer_priv_t), + _info(new(zeromem) Demuxer_Info) +{ + fill_false_pointers(antiviral_hole,reinterpret_cast<long>(&pin)-reinterpret_cast<long>(&antiviral_hole)); + pin=DEMUX_PIN; + _init(_stream,a_id,v_id,s_id); +} + Demuxer::~Demuxer() { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); unsigned i; MSG_V("DEMUXER: freeing demuxer at %p \n",this); - if(driver) driver->close(this); + if(dpriv.driver) dpriv.driver->close(this); // free streams: - for(i=0;i<MAX_A_STREAMS;i++) if(a_streams[i]) delete a_streams[i]; - for(i=0;i<MAX_V_STREAMS;i++) if(v_streams[i]) delete v_streams[i]; + for(i=0;i<MAX_A_STREAMS;i++) if(dpriv.a_streams[i]) delete dpriv.a_streams[i]; + for(i=0;i<MAX_V_STREAMS;i++) if(dpriv.v_streams[i]) delete dpriv.v_streams[i]; // free demuxers: delete audio; audio=NULL; delete video; video=NULL; @@ -142,70 +164,104 @@ sh_audio_t* Demuxer::get_sh_audio(int id) const { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); if(id > MAX_A_STREAMS-1 || id < 0) { MSG_WARN("Requested audio stream id overflow (%d > %d)\n", id, MAX_A_STREAMS); return NULL; } check_pin("demuxer",pin,DEMUX_PIN); - return a_streams[id]; + return dpriv.a_streams[id]; } sh_audio_t* Demuxer::new_sh_audio_aid(int id,int aid) { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); if(id > MAX_A_STREAMS-1 || id < 0) { MSG_WARN("Requested audio stream id overflow (%d > %d)\n", id, MAX_A_STREAMS); return NULL; } - if(a_streams[id]) { + if(dpriv.a_streams[id]) { MSG_WARN(MSGTR_AudioStreamRedefined,id); } else { sh_audio_t *sh; MSG_V("==> Found audio stream: %d\n",id); - a_streams[id]=new(zeromem) sh_audio_t; - sh = a_streams[id]; + dpriv.a_streams[id]=new(zeromem) sh_audio_t; + sh = dpriv.a_streams[id]; // set some defaults sh->afmt=bps2afmt(2); /* PCM */ sh->audio_out_minsize=8192;/* default size, maybe not enough for Win32/ACM*/ MSG_V("ID_AUDIO_ID=%d\n", aid); } - a_streams[id]->id = aid; + dpriv.a_streams[id]->id = aid; check_pin("demuxer",pin,DEMUX_PIN); - return a_streams[id]; + return dpriv.a_streams[id]; } sh_video_t* Demuxer::get_sh_video(int id) const { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); if(id > MAX_V_STREAMS-1 || id < 0) { MSG_WARN("Requested video stream id overflow (%d > %d)\n", id, MAX_V_STREAMS); return NULL; } check_pin("demuxer",pin,DEMUX_PIN); - return v_streams[id]; + return dpriv.v_streams[id]; } sh_video_t* Demuxer::new_sh_video_vid(int id,int vid) { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); if(id > MAX_V_STREAMS-1 || id < 0) { MSG_WARN("Requested video stream id overflow (%d > %d)\n", id, MAX_V_STREAMS); return NULL; } - if(v_streams[id]) { + if(dpriv.v_streams[id]) { MSG_WARN(MSGTR_VideoStreamRedefined,id); } else { MSG_V("==> Found video stream: %d\n",id); - v_streams[id]=new(zeromem) sh_video_t; + dpriv.v_streams[id]=new(zeromem) sh_video_t; MSG_V("ID_VIDEO_ID=%d\n", vid); } - v_streams[id]->id = vid; + dpriv.v_streams[id]->id = vid; check_pin("demuxer",pin,DEMUX_PIN); - return v_streams[id]; + return dpriv.v_streams[id]; } +char Demuxer::get_sh_sub(int id) const +{ + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); + if(id > MAX_A_STREAMS-1 || id < 0) { + MSG_WARN("Requested sub stream id overflow (%d > %d)\n", + id, MAX_A_STREAMS); + return NULL; + } + check_pin("demuxer",pin,DEMUX_PIN); + return dpriv.s_streams[id]; +} + +char Demuxer::new_sh_sub(int id) { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); + if(id > MAX_V_STREAMS-1 || id < 0) { + MSG_WARN("Requested video stream id overflow (%d > %d)\n", + id, MAX_V_STREAMS); + return NULL; + } + if(dpriv.s_streams[id]) { + MSG_WARN(MSGTR_SubStreamRedefined,id); + } else { + MSG_V("==> Found video stream: %d\n",id); + dpriv.s_streams[id]=1; + } + check_pin("demuxer",pin,DEMUX_PIN); + return dpriv.s_streams[id]; +} + int Demuxer::fill_buffer(Demuxer_Stream *ds){ + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); /* Note: parameter 'ds' can be NULL! */ - return driver->demux(this,ds); + return dpriv.driver->demux(this,ds); } // ==================================================================== @@ -245,10 +301,10 @@ return NULL; } -Demuxer* demux_open_stream(stream_t *stream,int audio_id,int video_id,int dvdsub_id) +MPXP_Rc Demuxer::open() { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); unsigned i; - Demuxer *demuxer=NULL,*new_demux=NULL; i=0; if(demux_conf.type) { @@ -260,59 +316,54 @@ } MSG_V("Forcing %s ... ",drv->name); /* don't remove it from loop!!! (for initializing) */ - demuxer = new(zeromem) Demuxer(stream,audio_id,video_id,dvdsub_id); - stream_reset(demuxer->stream); - stream_seek(demuxer->stream,demuxer->stream->start_pos); - if(drv->probe(demuxer)!=MPXP_Ok) { + stream_reset(stream); + stream_seek(stream,stream->start_pos); + if(drv->probe(this)!=MPXP_Ok) { MSG_ERR("Can't probe stream with driver: '%s'\n",demux_conf.type); goto err_exit; } - demuxer->driver = drv; + dpriv.driver = drv; goto force_driver; } again: for(;ddrivers[i]!=&demux_null;i++) { MSG_V("Probing %s ... ",ddrivers[i]->name); /* don't remove it from loop!!! (for initializing) */ - demuxer = new(zeromem) Demuxer(stream,audio_id,video_id,dvdsub_id); - stream_reset(demuxer->stream); - stream_seek(demuxer->stream,demuxer->stream->start_pos); - if(ddrivers[i]->probe(demuxer)==MPXP_Ok) { + stream_reset(stream); + stream_seek(stream,stream->start_pos); + if(ddrivers[i]->probe(this)==MPXP_Ok) { MSG_V("OK\n"); - demuxer->driver = ddrivers[i]; + dpriv.driver = ddrivers[i]; break; } MSG_V("False\n"); - delete demuxer; demuxer=NULL; } - if(!demuxer || !demuxer->driver) { + if(!dpriv.driver) { err_exit: MSG_ERR(MSGTR_FormatNotRecognized); - if(demuxer) { delete demuxer; demuxer=NULL; } - return NULL; + return MPXP_False; } force_driver: - if(!(new_demux=demuxer->driver->open(demuxer))) { - MSG_ERR("Can't open stream with '%s'\n", demuxer->driver->name); - demuxer->driver=NULL; + if(!(priv=dpriv.driver->open(this))) { + MSG_ERR("Can't open stream with '%s'\n", dpriv.driver->name); + dpriv.driver=NULL; i++; if(demux_conf.type) goto err_exit; else goto again; } - demuxer=new_demux; - MSG_OK("Using: %s\n",demuxer->driver->name); + MSG_OK("Using: %s\n",dpriv.driver->name); for(i=0;i<sizeof(stream_txt_ids)/sizeof(struct s_stream_txt_ids);i++) - if(!demuxer->info().get(stream_txt_ids[i].demuxer_id)) { + if(!info().get(stream_txt_ids[i].demuxer_id)) { char stream_name[256]; - if(stream_control(demuxer->stream,stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { - demuxer->info().add(stream_txt_ids[i].demuxer_id,stream_name); + if(stream_control(stream,stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { + info().add(stream_txt_ids[i].demuxer_id,stream_name); } } - stream->demuxer=demuxer; - return demuxer; + stream->demuxer=this; + return MPXP_Ok; } -Demuxer* demux_open(stream_t *vs,int audio_id,int video_id,int dvdsub_id){ +Demuxer* Demuxer::open(stream_t *vs,int audio_id,int video_id,int dvdsub_id){ stream_t *as = NULL,*ss = NULL; Demuxer *vd,*ad = NULL,*sd = NULL; int afmt = 0,sfmt = 0; @@ -336,20 +387,26 @@ } } - vd = demux_open_stream(vs,audio_id,video_id,dvdsub_id); - if(!vd) + vd = new(zeromem) Demuxer(vs,audio_id,video_id,dvdsub_id); + if(vd->open()!=MPXP_Ok) { + delete vd; return NULL; + } if(as) { - ad = demux_open_stream(as,audio_id,-2,-2); - if(!ad) + ad = new(zeromem) Demuxer(as,audio_id,-2,-2); + if(ad->open()!=MPXP_Ok) { MSG_WARN("Failed to open audio demuxer: %s\n",demux_conf.audio_stream); + delete ad; ad = NULL; + } else if(ad->audio->sh && ((sh_audio_t*)ad->audio->sh)->wtag == 0x55) // MP3 m_config_set_flag(mpxp_context().mconfig,"mp3.hr-seek",1); // Enable high res seeking } if(ss) { - sd = demux_open_stream(ss,-2,-2,dvdsub_id); - if(!sd) + sd = new(zeromem) Demuxer(ss,-2,-2,dvdsub_id); + if(sd->open()!=MPXP_Ok) { MSG_WARN("Failed to open subtitles demuxer: %s\n",demux_conf.sub_stream); + delete sd; sd = NULL; + } } if(ad && sd) @@ -362,6 +419,7 @@ } int Demuxer::seek(const seek_args_t* seeka){ + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); sh_audio_t *sh_audio=reinterpret_cast<sh_audio_t*>(audio->sh); if(!(stream->type&STREAMTYPE_SEEKABLE)) @@ -386,7 +444,7 @@ audio->prev_pts=0; if(sh_audio) sh_audio->timer=0; - if(driver->seek) driver->seek(this,seeka); + if(dpriv.driver->seek) dpriv.driver->seek(this,seeka); else MSG_WARN("Demuxer seek error\n"); check_pin("demuxer",pin,DEMUX_PIN); return 1; @@ -410,10 +468,17 @@ m_config_register_options(cfg,demuxer_opts); } +int Demuxer::demux(Demuxer_Stream* ds) { + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); + if(dpriv.driver) return dpriv.driver->demux(this,ds); + return 0; +} + MPXP_Rc Demuxer::ctrl(int cmd, any_t*arg) const { - if(driver) - return driver->control(this,cmd,arg); + demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); + if(dpriv.driver) + return dpriv.driver->control(this,cmd,arg); check_pin("demuxer",pin,DEMUX_PIN); return MPXP_Unknown; } Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demuxer.h 2012-12-05 09:25:22 UTC (rev 510) @@ -101,16 +101,23 @@ Switch_Subs =3 }; + static Demuxer* open(stream_t *stream,int aid,int vid,int sid); + + virtual MPXP_Rc open(); + virtual int demux(Demuxer_Stream* ds); + virtual Demuxer_Info& info() const { return *_info; } virtual int fill_buffer(Demuxer_Stream *ds); virtual int seek(const seek_args_t* seeka); - virtual sh_audio_t* get_sh_audio(int id) const; - virtual sh_video_t* get_sh_video(int id) const; + virtual sh_audio_t* get_sh_audio(int id=0) const; + virtual sh_video_t* get_sh_video(int id=0) const; + virtual char get_sh_sub(int id=0) const; virtual sh_audio_t* new_sh_audio_aid(int id,int aid); sh_audio_t* new_sh_audio(int i=0) { return new_sh_audio_aid(i, i); } virtual sh_video_t* new_sh_video_vid(int id,int vid); sh_video_t* new_sh_video(int i=0) { return new_sh_video_vid(i, i); } + virtual char new_sh_sub(int i=0); virtual int switch_audio(int id) const; virtual int switch_video(int id) const; @@ -123,9 +130,6 @@ Demuxer_Stream* audio; /**< audio buffer/demuxer */ Demuxer_Stream* video; /**< video buffer/demuxer */ Demuxer_Stream* sub; /**< DVD's subtitle buffer/demuxer */ - sh_audio_t* a_streams[MAX_A_STREAMS]; /**< audio streams (sh_audio_t) for multilanguage movies */ - sh_video_t* v_streams[MAX_V_STREAMS]; /**< video streams (sh_video_t) for multipicture movies */ - char s_streams[MAX_S_STREAMS]; /**< DVD's subtitles (flag) streams for multilanguage movies */ off_t filepos; /**< current pos. of input stream */ off_t movi_start; /**< real start of movie within of stream */ off_t movi_end; /**< real end of movie within of stream */ @@ -133,10 +137,11 @@ demuxer_flags_e flags; /**< set of DEMUXF_* bits */ demuxer_type_e file_format; /**< file format: Type_*(mpeg/avi/asf). Will be replaced with properties in the further versions */ int synced; /**< indicates stream synchronisation. TODO: mpg->priv */ - Opaque* priv; /**< private data of demuxer's driver.*/ - const demuxer_driver_t* driver; /**< driver associated with this demuxer */ private: + void _init(stream_t *_stream,int a_id,int v_id,int s_id); + + LocalPtr<Opaque> demuxer_priv; LocalPtr<Demuxer_Info> _info; /**< human-readable info from stream/movie (like movie name,author,duration)*/ }; inline Demuxer::demuxer_flags_e operator~(Demuxer::demuxer_flags_e a) { return static_cast<Demuxer::demuxer_flags_e>(~static_cast<unsigned>(a)); } @@ -147,11 +152,8 @@ inline Demuxer::demuxer_flags_e operator&=(Demuxer::demuxer_flags_e a, Demuxer::demuxer_flags_e b) { return (a=static_cast<Demuxer::demuxer_flags_e>(static_cast<unsigned>(a)&static_cast<unsigned>(b))); } inline Demuxer::demuxer_flags_e operator^=(Demuxer::demuxer_flags_e a, Demuxer::demuxer_flags_e b) { return (a=static_cast<Demuxer::demuxer_flags_e>(static_cast<unsigned>(a)^static_cast<unsigned>(b))); } - Demuxer* demux_open(stream_t *stream,int aid,int vid,int sid); - // This is defined here because demux_stream_t ins't defined in stream.h - stream_t* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds); - - Demuxer* new_demuxers_demuxer(Demuxer* vd, Demuxer* ad, Demuxer* sd); + stream_t* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds); + Demuxer* new_demuxers_demuxer(Demuxer* vd, Demuxer* ad, Demuxer* sd); }// namespace mpxp #endif Modified: mplayerxp/libmpdemux/demuxer_internal.h =================================================================== --- mplayerxp/libmpdemux/demuxer_internal.h 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demuxer_internal.h 2012-12-05 09:25:22 UTC (rev 510) @@ -13,9 +13,10 @@ **/ MPXP_Rc (*probe)(Demuxer *d); /** Opens stream. - * @param d _this demxuer + * @param d _this demuxer + * @return priv_t* **/ - Demuxer* (*open)(Demuxer *d); + Opaque* (*open)(Demuxer *d); /** Reads and demuxes stream. * @param d _this demuxer * @param ds pointer to stream associated with demuxer Modified: mplayerxp/libmpdemux/demuxer_stream.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_stream.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/libmpdemux/demuxer_stream.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -136,14 +136,10 @@ MSG_HINT(MSGTR_MaybeNI); break; } - if(!demuxer->driver){ - MSG_DBG2("ds_fill_buffer: demux->driver==NULL failed\n"); + if(!demuxer->demux(this)){ + MSG_DBG2("ds_fill_buffer: demuxer->demux() failed\n"); break; // EOF } - if(!demuxer->driver->demux(demuxer,this)){ - MSG_DBG2("ds_fill_buffer: demux->driver->demux() failed\n"); - break; // EOF - } } _buffer_pos=_buffer_size=0; _buffer=NULL; Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/mplayerxp.cpp 2012-12-05 09:25:22 UTC (rev 510) @@ -1841,7 +1841,7 @@ MP_UNIT("demux_open"); - if(!input_state.after_dvdmenu) MPXPSys.assign_demuxer(demux_open(stream,mp_conf.audio_id,mp_conf.video_id,mp_conf.dvdsub_id)); + if(!input_state.after_dvdmenu) MPXPSys.assign_demuxer(Demuxer::open(stream,mp_conf.audio_id,mp_conf.video_id,mp_conf.dvdsub_id)); if(!MPXPSys.demuxer()) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR input_state.after_dvdmenu=0; Modified: mplayerxp/nls/help_mp-en.h =================================================================== --- mplayerxp/nls/help_mp-en.h 2012-12-04 17:04:36 UTC (rev 509) +++ mplayerxp/nls/help_mp-en.h 2012-12-05 09:25:22 UTC (rev 510) @@ -298,6 +298,9 @@ #ifndef MSGTR_VideoStreamRedefined #define MSGTR_VideoStreamRedefined "Warning! video stream header %d redefined!\n" #endif +#ifndef MSGTR_SubStreamRedefined +#define MSGTR_SubStreamRedefined "Warning! subtitle stream id: %d redefined!\n" +#endif #ifndef MSGTR_TooManyAudioInBuffer #define MSGTR_TooManyAudioInBuffer "\nDEMUXER: Too many (%d in %d bytes) audio packets in the buffer!\n" #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-08 08:15:19
|
Revision: 520 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=520&view=rev Author: nickols_k Date: 2012-12-08 08:15:09 +0000 (Sat, 08 Dec 2012) Log Message: ----------- enable RTSP_SESSION Modified Paths: -------------- mplayerxp/configure mplayerxp/libmpstream/librtsp/rtsp_session.cpp mplayerxp/libmpstream/librtsp/rtsp_session.h mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/realrtsp/Makefile mplayerxp/libmpstream/realrtsp/md5.h mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/tcp.cpp mplayerxp/libmpstream/tcp.h Removed Paths: ------------- mplayerxp/libmpstream/realrtsp/md5.cpp Modified: mplayerxp/configure =================================================================== --- mplayerxp/configure 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/configure 2012-12-08 08:15:09 UTC (rev 520) @@ -1155,8 +1155,9 @@ #include "$srcdir/../lavc/libpostproc/postprocess.h" #include "$srcdir/../lavc/libswscale/swscale.h" #include "$srcdir/../lavc/libswscale/rgb2rgb.h" +#include "$srcdir/../lavc/libavutil/audioconvert.h" #include "$srcdir/../lavc/libavutil/fifo.h" -#include "$srcdir/../lavc/libavutil/audioconvert.h" +#include "$srcdir/../lavc/libavutil/md5.h" #include "$srcdir/../lavc/libswresample/swresample.h" #include "$srcdir/../lavc/libavformat/riff.h" #include "$srcdir/../lavc/libavformat/avformat.h" Modified: mplayerxp/libmpstream/librtsp/rtsp_session.cpp =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp_session.cpp 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/librtsp/rtsp_session.cpp 2012-12-08 08:15:09 UTC (rev 520) @@ -219,7 +219,7 @@ return rtsp_session; } -int rtsp_session_read (libinput_t* libinput,rtsp_session_t *self, char *data, int len) { +int rtsp_session_read (Tcp& tcp,rtsp_session_t *self, char *data, int len) { if (self->real_session) { int to_copy=len; @@ -267,9 +267,9 @@ else if (self->rtp_session) { int l = 0; - Tcp tcp(libinput,self->rtp_session->rtp_socket); + Tcp _tcp(tcp.get_libinput(),self->rtp_session->rtp_socket); - l = read_rtp_from_server (tcp, data, len); + l = read_rtp_from_server (_tcp, data, len); /* send RTSP and RTCP keepalive */ rtcp_send_rr (self->s, self->rtp_session); Modified: mplayerxp/libmpstream/librtsp/rtsp_session.h =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp_session.h 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/librtsp/rtsp_session.h 2012-12-08 08:15:09 UTC (rev 520) @@ -36,7 +36,7 @@ rtsp_session_t *rtsp_session_start(Tcp& tcp, char **mrl, char *path, char *host, int port, int *redir, uint32_t bandwidth, char *user, char *pass); -int rtsp_session_read(libinput_t* libinput,rtsp_session_t *session, char *data, int len); +int rtsp_session_read(Tcp& tcp,rtsp_session_t *session, char *data, int len); void rtsp_session_end(rtsp_session_t *session); Modified: mplayerxp/libmpstream/network.cpp =================================================================== --- mplayerxp/libmpstream/network.cpp 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/network.cpp 2012-12-08 08:15:09 UTC (rev 520) @@ -44,6 +44,7 @@ #ifndef STREAMING_LIVE_DOT_COM #include "rtp.h" #endif +#include "librtsp/rtsp_session.h" #include "version.h" #include "stream_msg.h" @@ -666,41 +667,42 @@ return MPXP_Ok; } -#ifdef HAVE_RTSP_SESSION_H int -realrtsp_networking_read( int fd, char *buffer, int size, networking_t *stream_ctrl ) { - return rtsp_session_read(stream_ctrl->data, buffer, size); +realrtsp_networking_read( Tcp& tcp, char *buffer, int size, networking_t *networking ) { + return rtsp_session_read(tcp,reinterpret_cast<rtsp_session_t*>(networking->data), buffer, size); } -MPXP_Rc realrtsp_networking_start( net_fd_t* fd, networking_t *stream ) { +MPXP_Rc realrtsp_networking_start( Tcp& tcp, networking_t *networking ) { rtsp_session_t *rtsp; char *mrl; char *file; int port; int redirected, temp; - if( stream==NULL ) return MPXP_False; temp = 5; // counter so we don't get caught in infinite redirections (you never know) do { redirected = 0; port = networking->url->port ? networking->url->port : 554; - *fd = tcp_connect2Server( networking->url->hostname, port, 1); - if(*fd<0 && !networking->url->port) - *fd = tcp_connect2Server( networking->url->hostname,port = 7070, 1 ); - if(*fd<0) return MPXP_False; + tcp.close(); + tcp.open( networking->url->hostname, port, Tcp::IP4); + if(!tcp.established() && !networking->url->port) + tcp.open( networking->url->hostname,port = 7070, Tcp::IP4); + if(!tcp.established()) return MPXP_False; file = networking->url->file; if (file[0] == '/') file++; - mrl = mp_malloc(sizeof(char)*(strlen(networking->url->hostname)+strlen(file)+16)); + mrl = new char [strlen(networking->url->hostname)+strlen(file)+16]; sprintf(mrl,"rtsp://%s:%i/%s",networking->url->hostname,port,file); - rtsp = rtsp_session_start(fd,&mrl, file, - networking->url->hostname, port, &redirected); + rtsp = rtsp_session_start(tcp,&mrl, file, + networking->url->hostname, port, &redirected, + network_bandwidth,networking->url->username, + networking->url->password); if ( redirected == 1 ) { url_free(networking->url); networking->url = url_new(mrl); - closesocket(fd); + tcp.close(); } delete mrl; temp--; @@ -717,7 +719,6 @@ networking->status = networking_playing_e; return MPXP_Ok; } -#endif // HAVE_RTSP_SESSION_H #ifndef STREAMING_LIVE_DOT_COM @@ -774,7 +775,6 @@ return MPXP_False; } } -#ifdef HAVE_RTSP_SESSION_H else if( !strcasecmp( networking->url->protocol, "rtsp")) { if ((rc = realrtsp_networking_start( tcp, networking )) < 0) { MSG_INFO("Not a Realmedia rtsp url. Trying standard rtsp protocol.\n"); @@ -788,7 +788,6 @@ #endif } } -#endif else if(!strcasecmp( networking->url->protocol, "udp")) { tcp.close(); rc = rtp_networking_start(tcp, networking, 1); Modified: mplayerxp/libmpstream/realrtsp/Makefile =================================================================== --- mplayerxp/libmpstream/realrtsp/Makefile 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/realrtsp/Makefile 2012-12-08 08:15:09 UTC (rev 520) @@ -2,7 +2,7 @@ LIBNAME = librealrtsp.a -CXXSRCS= real.cpp xbuffer.cpp asmrp.cpp md5.cpp rmff.cpp sdpplin.cpp +CXXSRCS= real.cpp xbuffer.cpp asmrp.cpp rmff.cpp sdpplin.cpp SRCS = OBJS=$(SRCS:.c=.o) CXXOBJS=$(CXXSRCS:.cpp=.o) Deleted: mplayerxp/libmpstream/realrtsp/md5.cpp =================================================================== --- mplayerxp/libmpstream/realrtsp/md5.cpp 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/realrtsp/md5.cpp 2012-12-08 08:15:09 UTC (rev 520) @@ -1,165 +0,0 @@ -#include "mp_config.h" -#include "osdep/mplib.h" -using namespace mpxp; -/* - * Copyright (C) 2006 Michael Niedermayer (mic...@gm...) - * Copyright (C) 2003-2005 by Christopher R. Hertel (cr...@ub...) - * - * References: - * IETF RFC 1321: The MD5 Message-Digest Algorithm - * Ron Rivest. IETF, April, 1992 - * - * based on http://ubiqx.org/libcifs/source/Auth/MD5.c - * from Christopher R. Hertel (cr...@ub...) - * Simplified, cleaned and IMO redundant comments removed by michael. - * - * If you use gcc, then version 4.1 or later and -fomit-frame-pointer is - * strongly recommended. - * - * This file is part of FFmpeg. - * - * FFmpeg is mp_free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include <string.h> - -#include "osdep/bswap.h" -#include "md5.h" - -typedef struct AVMD5{ - uint64_t len; - uint8_t block[64]; - uint32_t ABCD[4]; -} AVMD5; - -const int av_md5_size= sizeof(AVMD5); - -static const uint8_t S[4][4] = { - { 7, 12, 17, 22 }, /* Round 1 */ - { 5, 9, 14, 20 }, /* Round 2 */ - { 4, 11, 16, 23 }, /* Round 3 */ - { 6, 10, 15, 21 } /* Round 4 */ -}; - -static const uint32_t T[64] = { // T[i]= fabs(sin(i+1)<<32) - 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, /* Round 1 */ - 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, - 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, - 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, - - 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, /* Round 2 */ - 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, - 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, - 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, - - 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, /* Round 3 */ - 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, - 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, - 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, - - 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, /* Round 4 */ - 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, - 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, - 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, -}; - -#define CORE(i, a, b, c, d) \ - t = S[i>>4][i&3];\ - a += T[i];\ -\ - if(i<32){\ - if(i<16) a += (d ^ (b&(c^d))) + X[ i &15 ];\ - else a += (c ^ (d&(c^b))) + X[ (1+5*i)&15 ];\ - }else{\ - if(i<48) a += (b^c^d) + X[ (5+3*i)&15 ];\ - else a += (c^(b|~d)) + X[ ( 7*i)&15 ];\ - }\ - a = b + (( a << t ) | ( a >> (32 - t) )); - -static void body(uint32_t ABCD[4], uint32_t X[16]){ - - int t; - int i; - unsigned int a= ABCD[3]; - unsigned int b= ABCD[2]; - unsigned int c= ABCD[1]; - unsigned int d= ABCD[0]; - -#ifdef WORDS_BIGENDIAN - for(i=0; i<16; i++) - X[i]= bswap_32(X[i]); -#endif - -#ifdef CONFIG_SMALL - for( i = 0; i < 64; i++ ){ - CORE(i,a,b,c,d) - t=d; d=c; c=b; b=a; a=t; - } -#else -#define CORE2(i) CORE(i,a,b,c,d) CORE((i+1),d,a,b,c) CORE((i+2),c,d,a,b) CORE((i+3),b,c,d,a) -#define CORE4(i) CORE2(i) CORE2((i+4)) CORE2((i+8)) CORE2((i+12)) -CORE4(0) CORE4(16) CORE4(32) CORE4(48) -#endif - - ABCD[0] += d; - ABCD[1] += c; - ABCD[2] += b; - ABCD[3] += a; -} - -void av_md5_init(AVMD5 *ctx){ - ctx->len = 0; - - ctx->ABCD[0] = 0x10325476; - ctx->ABCD[1] = 0x98badcfe; - ctx->ABCD[2] = 0xefcdab89; - ctx->ABCD[3] = 0x67452301; -} - -void av_md5_update(AVMD5 *ctx, const char *src, const int len){ - int i, j; - - j= ctx->len & 63; - ctx->len += len; - - for( i = 0; i < len; i++ ){ - ctx->block[j++] = src[i]; - if( 64 == j ){ - body(ctx->ABCD, (uint32_t*) ctx->block); - j = 0; - } - } -} - -void av_md5_final(AVMD5 *ctx, uint8_t *dst){ - int i; - uint64_t finalcount= le2me_64(ctx->len<<3); - - av_md5_update(ctx, "\200", 1); - while((ctx->len & 63)<56) - av_md5_update(ctx, "", 1); - - av_md5_update(ctx, (const uint8_t *)&finalcount, 8); - - for(i=0; i<4; i++) - ((uint32_t*)dst)[i]= le2me_32(ctx->ABCD[3-i]); -} - -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len){ - AVMD5 ctx[1]; - - av_md5_init(ctx); - av_md5_update(ctx, src, len); - av_md5_final(ctx, dst); -} Modified: mplayerxp/libmpstream/realrtsp/md5.h =================================================================== --- mplayerxp/libmpstream/realrtsp/md5.h 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/realrtsp/md5.h 2012-12-08 08:15:09 UTC (rev 520) @@ -59,14 +59,7 @@ # define AV_WL16(p, d) AV_WN16(p, d) # endif -extern const int av_md5_size; +#include "mp_conf_lavc.h" -struct AVMD5; - -void av_md5_init(struct AVMD5 *ctx); -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, const int len); -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); - #endif /* FFMPEG_MD5_H */ Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-08 08:15:09 UTC (rev 520) @@ -46,20 +46,18 @@ networking_t* networking; Tcp tcp; - libinput_t* libinput; }; Rtsp_Stream_Interface::Rtsp_Stream_Interface(libinput_t* _libinput) :Stream_Interface(_libinput), - tcp(_libinput,-1), - libinput(_libinput) {} + tcp(_libinput,-1) {} Rtsp_Stream_Interface::~Rtsp_Stream_Interface() {} #define RTSP_DEFAULT_PORT 554 int Rtsp_Stream_Interface::read(stream_packet_t*sp) { - return rtsp_session_read (libinput,reinterpret_cast<rtsp_session_t*>(networking->data), sp->buf, sp->len); + return rtsp_session_read (tcp,reinterpret_cast<rtsp_session_t*>(networking->data), sp->buf, sp->len); } off_t Rtsp_Stream_Interface::seek(off_t newpos) { return newpos; } Modified: mplayerxp/libmpstream/tcp.cpp =================================================================== --- mplayerxp/libmpstream/tcp.cpp 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/tcp.cpp 2012-12-08 08:15:09 UTC (rev 520) @@ -266,5 +266,5 @@ int Tcp::write(const uint8_t* buf,unsigned len,int flags) const { return ::send(_fd,buf,len,flags); } int Tcp::established() const { return _fd > 0; } Tcp::tcp_error_e Tcp::error() const { return _error; } - +libinput_t* Tcp::get_libinput() const { return libinput; } } // namespace mpxp Modified: mplayerxp/libmpstream/tcp.h =================================================================== --- mplayerxp/libmpstream/tcp.h 2012-12-08 07:53:03 UTC (rev 519) +++ mplayerxp/libmpstream/tcp.h 2012-12-08 08:15:09 UTC (rev 520) @@ -48,6 +48,7 @@ virtual int established() const; virtual int has_data(int timeout) const; virtual tcp_error_e error() const; + virtual libinput_t* get_libinput() const; virtual void open(const char *host,int port,tcp_af_e af=Tcp::IP4); virtual int read(uint8_t* buf,unsigned len,int flags=0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |