[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[415] mplayerxp
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] |