[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[565] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-12-17 07:55:21
|
Revision: 565 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=565&view=rev Author: nickols_k Date: 2012-12-17 07:55:13 +0000 (Mon, 17 Dec 2012) Log Message: ----------- convert struct ao_data into class Audio_Output! It seems that without intensive using of references my hacked compiler can produce something workable Modified Paths: -------------- mplayerxp/libao2/audio_out.cpp mplayerxp/libao2/audio_out.h mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/postproc/af.cpp mplayerxp/postproc/af_ao2.cpp mplayerxp/xmpcore/xmp_aplayer.cpp mplayerxp/xmpcore/xmp_vplayer.cpp Modified: mplayerxp/libao2/audio_out.cpp =================================================================== --- mplayerxp/libao2/audio_out.cpp 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/libao2/audio_out.cpp 2012-12-17 07:55:13 UTC (rev 565) @@ -37,7 +37,7 @@ #ifdef HAVE_JACK extern const ao_info_t audio_out_jack; #endif -} // namespace mpxp + static const ao_info_t* audio_out_drivers[] = { #ifdef USE_OSS_AUDIO @@ -69,12 +69,18 @@ NULL }; -typedef struct priv_s { - char antiviral_hole[RND_CHAR5]; - const ao_info_t* info; - AO_Interface* driver; -}priv_t; +struct priv_t : public Opaque { + public: + priv_t() {} + virtual ~priv_t() {} + char antiviral_hole[RND_CHAR5]; + const ao_info_t*info; + AO_Interface* driver; + int muted; + float mute_l,mute_r; +}; + const char * __FASTCALL__ ao_format_name(int format) { switch (format) @@ -176,9 +182,24 @@ return 8; } +Audio_Output::Audio_Output(const char* _subdevice) + :subdevice(mp_strdup(_subdevice)) +{ + priv_t* priv=new(zeromem) priv_t; + opaque=priv; + fill_false_pointers(antiviral_hole,reinterpret_cast<long>(&opaque)-reinterpret_cast<long>(&antiviral_hole)); + priv->driver=NULL; +} -void ao_print_help( void ) +Audio_Output::~Audio_Output() { + priv_t* priv=static_cast<priv_t*>(opaque); + delete priv->driver; + if(subdevice) delete subdevice; + delete priv; +} + +void Audio_Output::print_help() const { unsigned i; MSG_INFO("Available audio output drivers:\n"); i=0; @@ -189,20 +210,19 @@ MSG_INFO("\n"); } -MPXP_Rc __FASTCALL__ ao_register(ao_data_t* ao,const char *driver_name,unsigned flags) -{ - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); +MPXP_Rc Audio_Output::_register(const char *driver_name,unsigned flags) const { + priv_t* priv=static_cast<priv_t*>(opaque); unsigned i; if(!driver_name) { priv->info=audio_out_drivers[0]; - priv->driver=audio_out_drivers[0]->query_interface(ao->subdevice); + priv->driver=audio_out_drivers[0]->query_interface(subdevice?subdevice:""); } else for (i=0; audio_out_drivers[i] != &audio_out_null; i++) { const ao_info_t *info = audio_out_drivers[i]; if(strcmp(info->short_name,driver_name) == 0){ priv->info = audio_out_drivers[i]; - priv->driver = audio_out_drivers[i]->query_interface(ao->subdevice?ao->subdevice:""); + priv->driver = audio_out_drivers[i]->query_interface(subdevice?subdevice:""); break; } } @@ -210,225 +230,143 @@ return MPXP_False; } -const ao_info_t* ao_get_info( const ao_data_t* ao ) -{ - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); +const ao_info_t* Audio_Output::get_info() const { + priv_t* priv=static_cast<priv_t*>(opaque); return priv->info; } -ao_data_t* __FASTCALL__ ao_init(const char *subdevice) -{ - ao_data_t* ao; - ao=new(zeromem) ao_data_t; - if(subdevice) ao->subdevice=mp_strdup(subdevice); - priv_t* priv=new(zeromem) priv_t; - ao->opaque=priv; - fill_false_pointers(ao->antiviral_hole,offsetof(ao_data_t,opaque)-offsetof(ao_data_t,antiviral_hole)); - priv->driver=NULL; - return ao; +MPXP_Rc Audio_Output::configure(unsigned r,unsigned c,unsigned f) const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->configure(r,c,f); } -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->driver->configure(rate,channels,format); +unsigned Audio_Output::channels() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->channels(); } - -void ao_uninit(ao_data_t*ao) -{ - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - delete priv->driver; - if(ao->subdevice) delete ao->subdevice; - delete priv; - delete ao; - ao=NULL; +unsigned Audio_Output::samplerate() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->samplerate(); } - -unsigned ao_channels(ao_data_t* ao) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->channels(); - } - return 0; +unsigned Audio_Output::format() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->format(); } -unsigned ao_samplerate(ao_data_t* ao) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->samplerate(); - } - return 0; -} -unsigned ao_format(ao_data_t* ao) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->format(); - } - return 0; -} -MPXP_Rc ao_test_channels(ao_data_t* ao,unsigned c) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->test_channels(c); - } - return MPXP_False; +MPXP_Rc Audio_Output::test_channels(unsigned c) const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->test_channels(c); } -MPXP_Rc ao_test_rate(ao_data_t* ao,unsigned s) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->test_rate(s); - } - return MPXP_False; +MPXP_Rc Audio_Output::test_rate(unsigned s) const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->test_rate(s); } -MPXP_Rc ao_test_format(ao_data_t* ao,unsigned f) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->test_format(f); - } - return MPXP_False; +MPXP_Rc Audio_Output::test_format(unsigned f) const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->test_format(f); } -unsigned ao_bps(ao_data_t* ao) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->channels()* +unsigned Audio_Output::bps() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->channels()* priv->driver->samplerate()* afmt2bps(priv->driver->format()); - } - return 0; } -unsigned ao_buffersize(ao_data_t* ao) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->buffersize(); - } - return 0; +unsigned Audio_Output::buffersize() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->buffersize(); } -unsigned ao_outburst(ao_data_t* ao) { - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->outburst(); - } - return 0; +unsigned Audio_Output::outburst() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->outburst(); } -void ao_reset(ao_data_t*ao) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - priv->driver->reset(); - } +void Audio_Output::reset() const { + priv_t* priv=static_cast<priv_t*>(opaque); + priv->driver->reset(); } -unsigned ao_get_space(const ao_data_t*ao) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->get_space(); - } - return 0; +unsigned Audio_Output::get_space() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->get_space(); } -float ao_get_delay(const ao_data_t*ao) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->get_delay(); - } - return 0; +float Audio_Output::get_delay() const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->get_delay(); } -unsigned __FASTCALL__ ao_play(ao_data_t*ao,const any_t* data,unsigned len,unsigned flags) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->play(data,len,flags); - } return 0; +unsigned Audio_Output::play(const any_t* data,unsigned len,unsigned flags) const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->play(data,len,flags); } -void ao_pause(ao_data_t*ao) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - priv->driver->pause(); - } +void Audio_Output::pause() const { + priv_t* priv=static_cast<priv_t*>(opaque); + priv->driver->pause(); } -void ao_resume(ao_data_t*ao) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - priv->driver->resume(); - } +void Audio_Output::resume() const { + priv_t* priv=static_cast<priv_t*>(opaque); + priv->driver->resume(); } -MPXP_Rc __FASTCALL__ ao_control(const ao_data_t*ao,int cmd,long arg) -{ - if(ao) { - priv_t* priv=reinterpret_cast<priv_t*>(ao->opaque); - return priv->driver->ctrl(cmd,arg); - } - return MPXP_Error; +MPXP_Rc Audio_Output::ctrl(int cmd,long arg) const { + priv_t* priv=static_cast<priv_t*>(opaque); + return priv->driver->ctrl(cmd,arg); } -void mixer_getvolume(const ao_data_t* ao, float *l,float *r ) -{ - ao_control_vol_t vol; - *l=0; *r=0; - if(MPXP_Ok != ao_control(ao,AOCONTROL_GET_VOLUME,(long)&vol)) return; - *r=vol.right; - *l=vol.left; +void Audio_Output::mixer_getvolume(float *l,float *r) const { + ao_control_vol_t vol; + *l=0; *r=0; + if(MPXP_Ok != ctrl(AOCONTROL_GET_VOLUME,(long)&vol)) return; + *r=vol.right; + *l=vol.left; } -void mixer_setvolume(const ao_data_t* ao,float l,float r ) -{ - ao_control_vol_t vol; - vol.right=r; vol.left=l; - ao_control(ao,AOCONTROL_SET_VOLUME,(long)&vol); +void Audio_Output::mixer_setvolume(float l,float r) const { + ao_control_vol_t vol; + vol.right=r; vol.left=l; + ctrl(AOCONTROL_SET_VOLUME,(long)&vol); } #define MIXER_CHANGE 3 -void mixer_incvolume(const ao_data_t* ao) -{ - float mixer_l, mixer_r; - mixer_getvolume(ao, &mixer_l,&mixer_r ); - mixer_l += MIXER_CHANGE; - if ( mixer_l > 100 ) mixer_l = 100; - mixer_r += MIXER_CHANGE; - if ( mixer_r > 100 ) mixer_r = 100; - mixer_setvolume(ao, mixer_l,mixer_r ); +void Audio_Output::mixer_incvolume() const { + float mixer_l, mixer_r; + mixer_getvolume(&mixer_l,&mixer_r ); + mixer_l += MIXER_CHANGE; + if ( mixer_l > 100 ) mixer_l = 100; + mixer_r += MIXER_CHANGE; + if ( mixer_r > 100 ) mixer_r = 100; + mixer_setvolume(mixer_l,mixer_r ); } -void mixer_decvolume(const ao_data_t* ao) -{ - float mixer_l, mixer_r; - mixer_getvolume(ao, &mixer_l,&mixer_r ); - mixer_l -= MIXER_CHANGE; - if ( mixer_l < 0 ) mixer_l = 0; - mixer_r -= MIXER_CHANGE; - if ( mixer_r < 0 ) mixer_r = 0; - mixer_setvolume(ao, mixer_l,mixer_r ); +void Audio_Output::mixer_decvolume() const { + float mixer_l, mixer_r; + mixer_getvolume(&mixer_l,&mixer_r ); + mixer_l -= MIXER_CHANGE; + if ( mixer_l < 0 ) mixer_l = 0; + mixer_r -= MIXER_CHANGE; + if ( mixer_r < 0 ) mixer_r = 0; + mixer_setvolume(mixer_l,mixer_r); } -float mixer_getbothvolume(const ao_data_t* ao) -{ - float mixer_l, mixer_r; - mixer_getvolume(ao, &mixer_l,&mixer_r ); - return ( mixer_l + mixer_r ) / 2; +float Audio_Output::mixer_getbothvolume() const { + float mixer_l, mixer_r; + mixer_getvolume(&mixer_l,&mixer_r); + return ( mixer_l + mixer_r ) / 2; } -static int muted=0; -static float mute_l,mute_r; -void mixer_mute(const ao_data_t* ao) -{ - if ( muted ) { mixer_setvolume(ao, mute_l,mute_r ); muted=0; } - else - { - mixer_getvolume(ao, &mute_l,&mute_r ); - mixer_setvolume(ao, 0,0 ); - muted=1; - } +void Audio_Output::mixer_mute() const { + priv_t* priv=static_cast<priv_t*>(opaque); + if ( priv->muted ) { mixer_setvolume(priv->mute_l,priv->mute_r ); priv->muted=0; } + else { + mixer_getvolume(&priv->mute_l,&priv->mute_r ); + mixer_setvolume(0,0); + priv->muted=1; + } } +} // namespace mpxp \ No newline at end of file Modified: mplayerxp/libao2/audio_out.h =================================================================== --- mplayerxp/libao2/audio_out.h 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/libao2/audio_out.h 2012-12-17 07:55:13 UTC (rev 565) @@ -16,64 +16,62 @@ const char *comment;/**< any additional comments */ AO_Interface* (*query_interface)(const std::string& subdevice); }; -} -/** Global data used by mplayerxp and plugins */ -struct ao_data_t -{ - char* subdevice; - char antiviral_hole[RND_CHAR2]; - any_t* opaque; /**< for internal use */ - any_t* priv; - float pts; /**< PTS of audio buffer */ -}; + enum { + AOCONTROL_GET_VOLUME=1, /**< Query volume level */ + AOCONTROL_SET_VOLUME /**< Sets new volume level */ + }; -enum { - AOCONTROL_GET_VOLUME=1, /**< Query volume level */ - AOCONTROL_SET_VOLUME /**< Sets new volume level */ -}; + struct ao_control_vol_t { + float left; + float right; + }; -struct ao_control_vol_t { - float left; - float right; -}; + /** Global data used by mplayerxp and plugins */ + struct Audio_Output : public Opaque { + public: + Audio_Output(const char* subdevice); + virtual ~Audio_Output(); -/* prototypes */ -extern const char * __FASTCALL__ ao_format_name(int format); -extern int __FASTCALL__ ao_format_bits(int format); + virtual void print_help() const; + virtual MPXP_Rc _register(const char *driver_name,unsigned flags) const; + virtual const ao_info_t* get_info() const; + virtual MPXP_Rc configure(unsigned rate,unsigned channels,unsigned format) const; + virtual unsigned buffersize() const; + virtual unsigned outburst() const; + virtual unsigned channels() const; + virtual unsigned samplerate() const; + virtual unsigned format() const; + virtual unsigned bps() const; + virtual MPXP_Rc test_channels(unsigned c) const; + virtual MPXP_Rc test_rate(unsigned s) const; + virtual MPXP_Rc test_format(unsigned f) const; -extern void ao_print_help( void ); -extern MPXP_Rc __FASTCALL__ ao_register(ao_data_t* ao,const char *driver_name,unsigned flags); -extern const ao_info_t* ao_get_info( const ao_data_t* ao ); -extern ao_data_t* __FASTCALL__ ao_init(const char *subdevice); -extern MPXP_Rc __FASTCALL__ ao_configure(ao_data_t* priv,unsigned rate,unsigned channels,unsigned format); -extern void __FASTCALL__ ao_uninit(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_buffersize(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_outburst(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_channels(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_samplerate(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_format(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_bps(ao_data_t* priv); -extern MPXP_Rc __FASTCALL__ ao_test_channels(ao_data_t* priv,unsigned c); -extern MPXP_Rc __FASTCALL__ ao_test_rate(ao_data_t* priv,unsigned s); -extern MPXP_Rc __FASTCALL__ ao_test_format(ao_data_t* priv,unsigned f); + virtual void reset() const; + virtual unsigned get_space() const; + virtual unsigned play(const any_t* data,unsigned len,unsigned flags) const; + virtual float get_delay() const; + virtual void pause() const; + virtual void resume() const; + virtual MPXP_Rc ctrl(int cmd,long arg) const; -extern void __FASTCALL__ ao_reset(ao_data_t* priv); -extern unsigned __FASTCALL__ ao_get_space(const ao_data_t* priv); -extern unsigned __FASTCALL__ ao_play(ao_data_t* priv,const any_t* data,unsigned len,unsigned flags); -extern float __FASTCALL__ ao_get_delay(const ao_data_t* priv); -extern void __FASTCALL__ ao_pause(ao_data_t* priv); -extern void __FASTCALL__ ao_resume(ao_data_t* priv); -extern MPXP_Rc __FASTCALL__ ao_control(const ao_data_t* priv,int cmd,long arg); + virtual void mixer_getvolume(float *l,float *r ) const; + virtual void mixer_setvolume(float l,float r ) const; + virtual void mixer_incvolume() const; + virtual void mixer_decvolume() const; + virtual float mixer_getbothvolume() const; + void mixer_mute() const; + //virtual void mixer_setbothvolume( int v ); + inline void mixer_setbothvolume(float v) const { mixer_setvolume(v,v); } -extern void mixer_getvolume(const ao_data_t* ao,float *l,float *r ); -extern void mixer_setvolume(const ao_data_t* ao,float l,float r ); -extern void mixer_incvolume(const ao_data_t* ao); -extern void mixer_decvolume(const ao_data_t* ao); -extern float mixer_getbothvolume(const ao_data_t* ao); -void mixer_mute(const ao_data_t* ao); - -//extern void mixer_setbothvolume( int v ); -static inline void mixer_setbothvolume(const ao_data_t* ao, float v ) { mixer_setvolume(ao,v,v); } - + char* subdevice; + float pts; /**< PTS of audio buffer */ + private: + char antiviral_hole[RND_CHAR2]; + any_t* opaque; /**< for internal use */ + }; + /* prototypes */ + extern const char * __FASTCALL__ ao_format_name(int format); + extern int __FASTCALL__ ao_format_bits(int format); +} // namespace mpxp #endif Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/mplayerxp.cpp 2012-12-17 07:55:13 UTC (rev 565) @@ -356,7 +356,7 @@ if(mask&INITED_AO){ inited_flags&=~INITED_AO; MP_UNIT("uninit_ao"); - ao_uninit(mpxp_context().audio().output); + delete mpxp_context().audio().output; mpxp_context().audio().output=NULL; } @@ -543,7 +543,7 @@ exit(0); } if(mp_conf.audio_driver && strcmp(mp_conf.audio_driver,"help")==0) { - ao_print_help(); + mpxp_context().audio().output->print_help(); mpxp_uninit_structs(); exit(0); } @@ -608,7 +608,7 @@ mp_input_print_binds(MPXPSys.libinput()); Stream::print_drivers(); mpxp_context().video().output->print_help(); - ao_print_help(); + mpxp_context().audio().output->print_help(); vf_help(); af_help(); vfm_help(); @@ -705,7 +705,7 @@ if(sh_audio){ MP_UNIT("seek_audio_reset"); mpca_resync_stream(mpxp_context().audio().decoder); - ao_reset(mpxp_context().audio().output); // stop audio, throwing away buffered data + mpxp_context().audio().output->reset(); // stop audio, throwing away buffered data } if (mpxp_context().video().output->vobsub) { @@ -801,12 +801,12 @@ 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(mpxp_context().audio().output) + ,sh_audio->timer-mpxp_context().audio().output->get_delay() ,(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(mpxp_context().audio().output) + ,sh_audio->timer-mpxp_context().audio().output->get_delay() ,(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() ); @@ -1128,13 +1128,13 @@ d_audio->sh=NULL; sh_audio=reinterpret_cast<sh_audio_t*>(d_audio->sh); } else { - if(!(mpxp_context().audio().output=ao_init(ao_subdevice))) { + if(!(mpxp_context().audio().output=new(zeromem) Audio_Output(ao_subdevice?ao_subdevice:""))) { MSG_ERR(MSGTR_CannotInitAO); d_audio->sh=NULL; sh_audio=reinterpret_cast<sh_audio_t*>(d_audio->sh); } if(ao_subdevice) delete ao_subdevice; - ao_inited=ao_register(mpxp_context().audio().output,mp_conf.audio_driver,0); + ao_inited=mpxp_context().audio().output->_register(mp_conf.audio_driver?mp_conf.audio_driver:"",0); if (ao_inited!=MPXP_Ok){ MSG_FATAL(MSGTR_InvalidAOdriver,mp_conf.audio_driver); exit_player(MSGTR_Exit_error); @@ -1203,7 +1203,7 @@ sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); Demuxer_Stream *d_audio=_demuxer->audio; int rc=0; - const ao_info_t *info=ao_get_info(mpxp_context().audio().output); + const ao_info_t *info=mpxp_context().audio().output->get_info(); MP_UNIT("setup_audio"); MSG_V("AO: [%s] %iHz %s %s\n", info->short_name, @@ -1242,7 +1242,7 @@ ,sh_audio->audio_out_minsize); } - if(MPXP_Ok!=ao_configure(mpxp_context().audio().output, + if(MPXP_Ok!=mpxp_context().audio().output->configure( samplerate, channels, format)) { @@ -1256,8 +1256,11 @@ if(mpca_init_filters(mpxp_context().audio().decoder, sh_audio->rate, sh_audio->nch, mpaf_format_e(sh_audio->afmt), - ao_samplerate(mpxp_context().audio().output), ao_channels(mpxp_context().audio().output), mpaf_format_e(ao_format(mpxp_context().audio().output)), - ao_outburst(mpxp_context().audio().output)*4, ao_buffersize(mpxp_context().audio().output))!=MPXP_Ok) { + mpxp_context().audio().output->samplerate(), + mpxp_context().audio().output->channels(), + mpaf_format_e(mpxp_context().audio().output->format()), + mpxp_context().audio().output->outburst()*4, + mpxp_context().audio().output->buffersize())!=MPXP_Ok) { MSG_ERR("No matching audio filter found!\n"); } } @@ -1289,7 +1292,7 @@ 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(mpxp_context().audio().output)); + ipts=(unsigned)(sh_audio->timer-mpxp_context().audio().output->get_delay()); rpts=_demuxer->movi_length-ipts; h = ipts/3600; m = (ipts/60)%60; @@ -1348,7 +1351,7 @@ 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 + mpxp_context().audio().output->pause(); // pause audio, keep data if possible } while( (cmd = mp_input_get_cmd(_libinput,20,1,1)) == NULL) { @@ -1363,7 +1366,7 @@ if(osd_function==OSD_PAUSE) osd_function=OSD_PLAY; if (ao_inited==MPXP_Ok && sh_audio) { - ao_resume(mpxp_context().audio().output); // resume audio + mpxp_context().audio().output->resume(); // resume audio if(xmp_test_model(XMP_Run_AudioPlayer)) { mpxp_context().engine().xp_core->in_pause=0; __MP_SYNCHRONIZE(audio_play_mutex,pthread_cond_signal(&audio_play_cond)); @@ -1463,17 +1466,17 @@ } break; case MP_CMD_MUTE: - mixer_mute(mpxp_context().audio().output); + mpxp_context().audio().output->mixer_mute(); break; case MP_CMD_VOLUME : { int v = cmd->args[0].v.i; - if(v > 0) mixer_incvolume(mpxp_context().audio().output); - else mixer_decvolume(mpxp_context().audio().output); + if(v > 0) mpxp_context().audio().output->mixer_incvolume(); + else mpxp_context().audio().output->mixer_decvolume(); #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec mpxp_context().video().output->osd_progbar_type=OSD_VOLUME; - mpxp_context().video().output->osd_progbar_value=(mixer_getbothvolume(mpxp_context().audio().output)*256.0)/100.0; + mpxp_context().video().output->osd_progbar_value=(mpxp_context().audio().output->mixer_getbothvolume()*256.0)/100.0; vo_osd_changed(OSDTYPE_PROGBAR); } #endif Modified: mplayerxp/mplayerxp.h =================================================================== --- mplayerxp/mplayerxp.h 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/mplayerxp.h 2012-12-17 07:55:13 UTC (rev 565) @@ -157,7 +157,7 @@ struct audio_processing_t { audio_decoder_t* decoder; - ao_data_t* output; + Audio_Output* output; }; struct video_processing_t { Modified: mplayerxp/postproc/af.cpp =================================================================== --- mplayerxp/postproc/af.cpp 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/postproc/af.cpp 2012-12-17 07:55:13 UTC (rev 565) @@ -576,7 +576,7 @@ { af_instance_t* filt = s?s->first:NULL; const char *filt_name=filt?filt->info->name:"ao2"; - if(strcmp(filt_name,"ao2")==0) return ao_test_format(mpxp_context().audio().output,mpaf2afmt(fmt)); + if(strcmp(filt_name,"ao2")==0) return mpxp_context().audio().output->test_format(mpaf2afmt(fmt)); else if(afmt2mpaf(fmt)==filt->conf.format) return MPXP_True; return MPXP_False; } @@ -585,7 +585,7 @@ { af_instance_t* filt = s?s->first:NULL; const char *filt_name=filt?filt->info->name:"ao2"; - if(strcmp(filt_name,"ao2")==0) return ao_test_rate(mpxp_context().audio().output,rate); + if(strcmp(filt_name,"ao2")==0) return mpxp_context().audio().output->test_rate(rate); else if(rate==filt->conf.rate) return MPXP_True; return MPXP_False; } @@ -594,7 +594,7 @@ { af_instance_t* filt = s?s->first:NULL; const char *filt_name=filt?filt->info->name:"ao2"; - if(strcmp(filt_name,"ao2")==0) return ao_test_channels(mpxp_context().audio().output,nch); + if(strcmp(filt_name,"ao2")==0) return mpxp_context().audio().output->test_channels(nch); else if(nch==filt->conf.nch) return MPXP_True; return MPXP_False; } Modified: mplayerxp/postproc/af_ao2.cpp =================================================================== --- mplayerxp/postproc/af_ao2.cpp 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/postproc/af_ao2.cpp 2012-12-17 07:55:13 UTC (rev 565) @@ -20,23 +20,23 @@ { unsigned i,ii; MPXP_Rc rval; - rval=ao_test_rate(mpxp_context().audio().output,irate); + rval=mpxp_context().audio().output->test_rate(irate); if(rval == MPXP_True) return irate; for(i=0;i<sizeof(rates)/sizeof(unsigned)-1;i++) { if(irate >= rates[i] && irate < rates[i+1]) break; } ii=i; for(;i<sizeof(rates)/sizeof(unsigned);i++) { - rval=ao_test_rate(mpxp_context().audio().output,rates[i]); + rval=mpxp_context().audio().output->test_rate(rates[i]); if(rval == MPXP_True) return rates[i]; } i=ii; for(;i<sizeof(rates)/sizeof(unsigned);i--) { - rval=ao_test_rate(mpxp_context().audio().output,rates[i]); + rval=mpxp_context().audio().output->test_rate(rates[i]); if(rval == MPXP_True) return rates[i]; } for(i=0;i<sizeof(rates)/sizeof(unsigned);i++) { - rval=ao_test_rate(mpxp_context().audio().output,rates[i]); + rval=mpxp_context().audio().output->test_rate(rates[i]); if(rval == MPXP_True) return rates[i]; } return 44100; @@ -46,14 +46,14 @@ { unsigned i; MPXP_Rc rval; - rval=ao_test_channels(mpxp_context().audio().output,ich); + rval=mpxp_context().audio().output->test_channels(ich); if(rval == MPXP_True) return ich; for(i=ich>1?ich:1;i<AF_NCH;i++) { - rval=ao_test_channels(mpxp_context().audio().output,i); + rval=mpxp_context().audio().output->test_channels(i); if(rval == MPXP_True) return i; } for(i=1;i<AF_NCH;i++) { - rval=ao_test_channels(mpxp_context().audio().output,i); + rval=mpxp_context().audio().output->test_channels(i); if(rval == MPXP_True) return i; } return 2; @@ -87,7 +87,7 @@ { unsigned i,j,idx; MPXP_Rc rval; - rval=ao_test_format(mpxp_context().audio().output,ifmt); + rval=mpxp_context().audio().output->test_format(ifmt); if(rval == MPXP_True) return ifmt; idx=-1; for(i=0;i<sizeof(cvt_list)/sizeof(fmt_cvt_t);i++) { @@ -97,7 +97,7 @@ i=idx; for(j=0;j<20;j++) { if(cvt_list[i].cvt_fourcc[j]==0) break; - rval=ao_test_format(mpxp_context().audio().output,cvt_list[i].cvt_fourcc[j]); + rval=mpxp_context().audio().output->test_format(cvt_list[i].cvt_fourcc[j]); if(rval == MPXP_True) return cvt_list[i].cvt_fourcc[j]; } return AFMT_S16_LE; @@ -128,7 +128,7 @@ switch(cmd){ case AF_CONTROL_SHOWCONF: { char sbuf[256]; - const ao_info_t*info=ao_get_info(mpxp_context().audio().output); + const ao_info_t*info=mpxp_context().audio().output->get_info(); MSG_INFO("AO-CONF: [%s] %uHz nch=%u %s (%3.1f-kbit)\n" ,info->short_name,s->rate,s->nch,mpaf_fmt2str(s->format,sbuf,sizeof(sbuf)) ,(s->rate*s->nch*(s->format&MPAF_BPS_MASK)*8)*0.001f); Modified: mplayerxp/xmpcore/xmp_aplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-17 07:55:13 UTC (rev 565) @@ -46,7 +46,7 @@ int ret=0; mpxp_context().audio().output->pts=sh_audio->timer*90000.0; - playsize=ao_get_space(mpxp_context().audio().output); + playsize=mpxp_context().audio().output->get_space(); if(!playsize) { if(sh_video) @@ -88,9 +88,9 @@ } if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len; - if(xmp_test_model(XMP_Run_AudioPlayer)) dec_ahead_audio_delay=ao_get_delay(mpxp_context().audio().output); + if(xmp_test_model(XMP_Run_AudioPlayer)) dec_ahead_audio_delay=mpxp_context().audio().output->get_delay(); - playsize=ao_play(mpxp_context().audio().output,sh_audio->a_buffer,playsize,0); + playsize=mpxp_context().audio().output->play(sh_audio->a_buffer,playsize,0); if(playsize>0){ sh_audio->a_buffer_len-=playsize; @@ -100,7 +100,7 @@ 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(mpxp_context().audio().output)*sh_audio->af_bps) { + if(sh_audio->a_pts_pos > mpxp_context().audio().output->get_delay()*sh_audio->af_bps) { sh_audio->timer+=playsize/(float)(sh_audio->af_bps); } else { sh_audio->timer=sh_audio->a_pts-(float)sh_audio->a_pts_pos/(float)sh_audio->af_bps; @@ -143,7 +143,7 @@ int eof = 0; struct timeval now; float d; - const float MAX_AUDIO_TIME = (float)ao_get_space(mpxp_context().audio().output) / sh_audio->af_bps + ao_get_delay(mpxp_context().audio().output); + const float MAX_AUDIO_TIME = (float)mpxp_context().audio().output->get_space() / sh_audio->af_bps + mpxp_context().audio().output->get_delay(); float min_audio_time = MAX_AUDIO_TIME; float min_audio, max_audio; int samples, collect_samples; @@ -231,7 +231,7 @@ } LOCK_AUDIO_PLAY(); - d = ao_get_delay(mpxp_context().audio().output) - min_audio_time; + d = mpxp_context().audio().output->get_delay() - min_audio_time; if( d > 0 ) { gettimeofday(&now,NULL); audio_play_timeout.tv_nsec = now.tv_usec * 1000 + d*1000000000l; Modified: mplayerxp/xmpcore/xmp_vplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vplayer.cpp 2012-12-15 17:27:08 UTC (rev 564) +++ mplayerxp/xmpcore/xmp_vplayer.cpp 2012-12-17 07:55:13 UTC (rev 565) @@ -41,8 +41,8 @@ } static void show_status_line_no_apts(sh_audio_t* sh_audio,float v_pts) { - 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); + if(mp_conf.av_sync_pts && sh_audio && (!mpxp_context().engine().xp_core->audio->eof || mpxp_context().audio().output->get_delay())) { + float a_pts = sh_audio->timer-mpxp_context().audio().output->get_delay(); 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 @@ -70,7 +70,7 @@ { 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(mpxp_context().audio().output)==0.0) + while(v_pts < 1.0 && sh_audio->timer==0.0 && mpxp_context().audio().output->get_delay()==0.0) yield_timeslice(); /* Wait for audio to start play */ if(sh_audio->timer > 2.0 && v_pts < 1.0) { MSG_V("Video chapter change detected\n"); @@ -97,9 +97,9 @@ /* 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(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().audio().output)) && + if((!mpxp_context().engine().xp_core->audio->eof || mpxp_context().audio().output->get_delay()) && (!mpxp_context().use_pts_fix2 || (!sh_audio->chapter_change && !sh_video->chapter_change))) - sleep_time=screen_pts-((sh_audio->timer-ao_get_delay(mpxp_context().audio().output)) + sleep_time=screen_pts-((sh_audio->timer-mpxp_context().audio().output->get_delay()) +(mp_conf.av_sync_pts?0:mpxp_context().engine().xp_core->initial_apts)); else if(mpxp_context().use_pts_fix2 && sh_audio->chapter_change) sleep_time=0; @@ -118,11 +118,11 @@ #define XP_MIN_AUDIOBUFF 0.05 #define XP_MAX_TIMESLICE 0.1 if(!mpxp_context().engine().xp_core->audio) sh_audio=NULL; - if(sh_audio && (!mpxp_context().engine().xp_core->audio->eof || ao_get_delay(mpxp_context().audio().output)) && sleep_time>XP_MAX_TIMESLICE) { + if(sh_audio && (!mpxp_context().engine().xp_core->audio->eof || mpxp_context().audio().output->get_delay()) && sleep_time>XP_MAX_TIMESLICE) { float t; if(xmp_test_model(XMP_Run_AudioPlayback)) { - t=ao_get_delay(mpxp_context().audio().output)-XP_MIN_AUDIOBUFF; + t=mpxp_context().audio().output->get_delay()-XP_MIN_AUDIOBUFF; if(t>XP_MAX_TIMESLICE) t=XP_MAX_TIMESLICE; } else @@ -233,11 +233,11 @@ like playing 48KHz audio on 44.1KHz soundcard and other. Now we know PTS of every audio frame so don't need to have it */ if(!mpxp_context().engine().xp_core->audio) sh_audio=NULL; - if(sh_audio && (!mpxp_context().engine().xp_core->audio->eof || ao_get_delay(mpxp_context().audio().output)) && !mp_conf.av_sync_pts) { + if(sh_audio && (!mpxp_context().engine().xp_core->audio->eof || mpxp_context().audio().output->get_delay()) && !mp_conf.av_sync_pts) { float a_pts=0; // unplayed bytes in our and soundcard/dma buffer: - float delay=ao_get_delay(mpxp_context().audio().output)+(float)sh_audio->a_buffer_len/(float)sh_audio->af_bps; + float delay=mpxp_context().audio().output->get_delay()+(float)sh_audio->a_buffer_len/(float)sh_audio->af_bps; if(xmp_test_model(XMP_Run_AudioPlayer)) delay += get_delay_audio_buffer(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |