mplayerxp-cvslog Mailing List for MplayerXP-mplayer with extra performance (Page 6)
Brought to you by:
olov
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
(53) |
Apr
(142) |
May
(129) |
Jun
(160) |
Jul
(102) |
Aug
(14) |
Sep
(50) |
Oct
(27) |
Nov
(52) |
Dec
(41) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(136) |
Feb
(170) |
Mar
(103) |
Apr
(102) |
May
(44) |
Jun
(25) |
Jul
(2) |
Aug
|
Sep
(6) |
Oct
(1) |
Nov
|
Dec
(4) |
2004 |
Jan
|
Feb
(21) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(12) |
Oct
(160) |
Nov
(63) |
Dec
(5) |
2005 |
Jan
(10) |
Feb
(14) |
Mar
(18) |
Apr
(74) |
May
(72) |
Jun
(22) |
Jul
(28) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2006 |
Jan
(91) |
Feb
(71) |
Mar
(1) |
Apr
|
May
|
Jun
(4) |
Jul
(3) |
Aug
(4) |
Sep
(21) |
Oct
(42) |
Nov
(9) |
Dec
(26) |
2007 |
Jan
(1) |
Feb
|
Mar
|
Apr
(17) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(134) |
Dec
(72) |
2008 |
Jan
(6) |
Feb
(1) |
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
(5) |
Aug
|
Sep
(1) |
Oct
(21) |
Nov
(41) |
Dec
(12) |
2009 |
Jan
(57) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
(25) |
Oct
(1) |
Nov
(46) |
Dec
(59) |
2010 |
Jan
(84) |
Feb
(5) |
Mar
|
Apr
(2) |
May
|
Jun
(2) |
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(122) |
Nov
(223) |
Dec
(132) |
2013 |
Jan
|
Feb
|
Mar
|
Apr
(8) |
May
(13) |
Jun
(10) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <nic...@us...> - 2012-12-10 15:13:41
|
Revision: 533 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=533&view=rev Author: nickols_k Date: 2012-12-10 15:13:31 +0000 (Mon, 10 Dec 2012) Log Message: ----------- security patch: use const std::string& instead of const char* in classes where it's possible Modified Paths: -------------- mplayerxp/libmpdemux/demuxer_info.cpp mplayerxp/libmpdemux/demuxer_info.h mplayerxp/libmpstream/cdd.h mplayerxp/libmpstream/cdda.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/mrl.cpp mplayerxp/libmpstream/mrl.h mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_lavc.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_null.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/stream_internal.h mplayerxp/libmpstream/url.cpp mplayerxp/libmpstream/url.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 Modified: mplayerxp/libmpdemux/demuxer_info.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_info.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpdemux/demuxer_info.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -48,10 +48,10 @@ return MPXP_Ok; } -int Demuxer_Info::print(const char *filename) const +int Demuxer_Info::print(const std::string& filename) const { unsigned i; - MSG_HINT(" CLIP INFO (%s):\n",filename); + MSG_HINT(" CLIP INFO (%s):\n",filename.c_str()); for(i=0;i<INFOT_MAX;i++) if(id[i]) MSG_HINT(" %s: %s\n",info_names[i],id[i]); Modified: mplayerxp/libmpdemux/demuxer_info.h =================================================================== --- mplayerxp/libmpdemux/demuxer_info.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpdemux/demuxer_info.h 2012-12-10 15:13:31 UTC (rev 533) @@ -4,6 +4,7 @@ #include "osdep/mplib.h" using namespace mpxp; #include "xmpcore/xmp_enums.h" +#include <string> namespace mpxp { enum { @@ -33,7 +34,7 @@ MPXP_Rc add(unsigned opt, const char *param); const char* get(unsigned opt) const; - int print(const char *filename) const; + int print(const std::string& filename) const; private: char *id[INFOT_MAX]; Modified: mplayerxp/libmpstream/cdd.h =================================================================== --- mplayerxp/libmpstream/cdd.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/cdd.h 2012-12-10 15:13:31 UTC (rev 533) @@ -42,11 +42,11 @@ CD_Info(); virtual ~CD_Info(); - virtual cd_track_t* add_track(const char *track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length); + virtual cd_track_t* add_track(const std::string& track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length); virtual cd_track_t* get_track(unsigned int track_nb) const; virtual void print() const; - virtual MPXP_Rc parse_xmcd(const char *_xmcd_file); + virtual MPXP_Rc parse_xmcd(const std::string& _xmcd_file); std::string artist; std::string album; @@ -73,8 +73,8 @@ CDD_Interface(); virtual ~CDD_Interface(); - virtual MPXP_Rc open_cdda(const char* dev,const char* track); - virtual MPXP_Rc open_cddb(libinput_t*,const char* dev,const char* track); + virtual MPXP_Rc open_cdda(const std::string& dev,const std::string& track); + virtual MPXP_Rc open_cddb(libinput_t*,const std::string& dev,const std::string& track); virtual int read(char *buf,track_t* trackidx); virtual void seek(off_t pos,track_t *trackidx); Modified: mplayerxp/libmpstream/cdda.cpp =================================================================== --- mplayerxp/libmpstream/cdda.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/cdda.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -37,12 +37,12 @@ m_config_register_options(cfg,cdda_conf); } -static unsigned cdda_parse_tracks(unsigned char *arr,unsigned nelem,const char *arg) +static unsigned cdda_parse_tracks(unsigned char *arr,unsigned nelem,const std::string& arg) { const char *st,*end; unsigned rval=0; - unsigned slen=strlen(arg); - st=arg; + unsigned slen=arg.length(); + st=arg.c_str(); memset(arr,0,sizeof(unsigned char)*nelem); do { size_t datalen,value,evalue,i; @@ -70,22 +70,22 @@ rval=value; } st=end+1; - if(st>arg+slen) break; + if(st>arg.c_str()+slen) break; }while(end); return rval; } -MPXP_Rc CDD_Interface::open_cdda(const char* dev,const char* arg) { +MPXP_Rc CDD_Interface::open_cdda(const std::string& dev,const std::string& arg) { unsigned cd_tracks; unsigned int audiolen=0; unsigned i; unsigned char arr[256]; int st_inited; - cd = cdio_cddap_identify(dev,mp_conf.verbose?1:0,NULL); + cd = cdio_cddap_identify(dev.c_str(),mp_conf.verbose?1:0,NULL); if(!cd) { - MSG_ERR("Can't open cdda device: %s\n",dev); + MSG_ERR("Can't open cdda device: %s\n",dev.c_str()); return MPXP_False; } Modified: mplayerxp/libmpstream/cddb.cpp =================================================================== --- mplayerxp/libmpstream/cddb.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/cddb.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -582,7 +582,7 @@ } } -cd_track_t* CD_Info::add_track(const char *track_name, +cd_track_t* CD_Info::add_track(const std::string& track_name, unsigned int track_nb, unsigned int _min, unsigned int _sec, @@ -591,7 +591,7 @@ unsigned long frame_length) { cd_track_t *cd_track; - if( track_name==NULL ) return NULL; + if( track_name.empty()) return NULL; cd_track = new(zeromem) cd_track_t; if( cd_track==NULL ) { @@ -697,13 +697,13 @@ return ptr; } -MPXP_Rc CD_Info::parse_xmcd(const char *_xmcd_file) { +MPXP_Rc CD_Info::parse_xmcd(const std::string& _xmcd_file) { int length, pos = 0; char *ptr; char *ptr2; unsigned int audiolen; - if( _xmcd_file==NULL ) return MPXP_False; - char* xmcd_file = mp_strdup(_xmcd_file); + if( _xmcd_file.empty() ) return MPXP_False; + char* xmcd_file = mp_strdup(_xmcd_file.c_str()); length = strlen(xmcd_file); ptr = xmcd_file; @@ -736,7 +736,7 @@ return MPXP_Ok; } -MPXP_Rc CDD_Interface::open_cddb(libinput_t *libinput,const char *dev, const char *track) { +MPXP_Rc CDD_Interface::open_cddb(libinput_t *libinput,const std::string& dev, const std::string& track) { char *xmcd_file = NULL; MPXP_Rc ret; Modified: mplayerxp/libmpstream/mrl.cpp =================================================================== --- mplayerxp/libmpstream/mrl.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/mrl.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -82,6 +82,11 @@ return line; } +const char *mrl_parse_line(const std::string& line,char **user,char **pass,char **ms,char **port) +{ + return mrl_parse_line(line.c_str(),user,pass,ms,port); +} + static void mrl_store_args(const char *arg,char *value, const mrl_config_t * args) { #ifdef TEST_MRL @@ -180,5 +185,9 @@ if(value) delete value; return param; } +const char * mrl_parse_params(const std::string& param, const mrl_config_t * args) +{ + return mrl_parse_params(param.c_str(),args); +} } // namespace mpxp Modified: mplayerxp/libmpstream/mrl.h =================================================================== --- mplayerxp/libmpstream/mrl.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/mrl.h 2012-12-10 15:13:31 UTC (rev 533) @@ -3,6 +3,7 @@ #define __MPXP_MRL_H 1 #include "mp_config.h" +#include <string> namespace mpxp { /** Parses line which contains MRL and splits it on components. * @param line source line to be parsed @@ -23,6 +24,7 @@ * @see mrl_parse_params **/ extern const char *mrl_parse_line(const char *line,char **user,char **pass,char **ms,char **port); + extern const char *mrl_parse_line(const std::string& line,char **user,char **pass,char **ms,char **port); enum { MRL_TYPE_PRINT =0, /**< NoType! Just printout value of argument */ @@ -52,5 +54,6 @@ * @see mrl_parse_line **/ extern const char * mrl_parse_params(const char *param,const mrl_config_t * args); + extern const char * mrl_parse_params(const std::string& param,const mrl_config_t * args); } // namespace mpxp #endif Modified: mplayerxp/libmpstream/s_cdd.cpp =================================================================== --- mplayerxp/libmpstream/s_cdd.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_cdd.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -23,7 +23,7 @@ Cdda_Stream_Interface(libinput_t* libinput); virtual ~Cdda_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -46,13 +46,13 @@ track_idx(255) {} Cdda_Stream_Interface::~Cdda_Stream_Interface() { delete priv; } -MPXP_Rc Cdda_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Cdda_Stream_Interface::open(const std::string& filename,unsigned flags) { MPXP_Rc rc; const char *param; char *device; UNUSED(flags); - if(strcmp(filename,"help") == 0) { + if(filename=="help") { MSG_HINT("Usage: cdda://<@device><#trackno>\n"); return MPXP_False; } @@ -133,7 +133,7 @@ Cddb_Stream_Interface(libinput_t* libinput); virtual ~Cddb_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); private: libinput_t* libinput; }; @@ -142,14 +142,14 @@ libinput(_libinput) {} Cddb_Stream_Interface::~Cddb_Stream_Interface() {} -MPXP_Rc Cddb_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Cddb_Stream_Interface::open(const std::string& filename,unsigned flags) { #ifdef HAVE_STREAMING const char *param; char *device; MPXP_Rc retval; UNUSED(flags); - if(strcmp(filename,"help") == 0) { + if(filename=="help") { MSG_HINT("Usage: cddb://<@device><#trackno>\n"); return MPXP_False; } Modified: mplayerxp/libmpstream/s_dvdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -53,7 +53,7 @@ DvdNav_Stream_Interface(libinput_t* libinput); virtual ~DvdNav_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -66,7 +66,7 @@ virtual float stream_pts() const; virtual std::string mime_type() const; private: - MPXP_Rc new_stream(const char * filename); + MPXP_Rc new_stream(const std::string& filename); void stream_ignore_timers(int ignore); void stream_sleep(int seconds); int stream_sleeping(); @@ -77,7 +77,7 @@ void cmd_handler(unsigned cmd); dvdnav_t* dvdnav; /* handle to libdvdnav stuff */ - const char* filename; /* path */ + std::string filename; /* path */ int ignore_timers; /* should timers be skipped? */ int sleeping; /* are we sleeping? */ unsigned int sleep_until; /* timer */ @@ -106,14 +106,13 @@ ignore_timers=ignore; } -MPXP_Rc DvdNav_Stream_Interface::new_stream(const char* _filename) { - const char * title_str; +MPXP_Rc DvdNav_Stream_Interface::new_stream(const std::string& _filename) { + const char* title_str; - if (!_filename) return MPXP_False; - filename=mp_strdup(_filename); + if (_filename.empty()) return MPXP_False; + filename=_filename; - if(dvdnav_open(&dvdnav,filename)!=DVDNAV_STATUS_OK) { - delete filename; + if(dvdnav_open(&dvdnav,filename.c_str())!=DVDNAV_STATUS_OK) { return MPXP_False; } @@ -180,7 +179,7 @@ return 0; } -MPXP_Rc DvdNav_Stream_Interface::open(const char *_filename,unsigned flags) +MPXP_Rc DvdNav_Stream_Interface::open(const std::string& _filename,unsigned flags) { const char *param; char *dvd_device; Modified: mplayerxp/libmpstream/s_dvdread.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdread.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_dvdread.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -54,7 +54,7 @@ DvdRead_Stream_Interface(libinput_t* libinput); virtual ~DvdRead_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -69,8 +69,8 @@ private: int chapter_from_cell(int title,int cell); int number_of_subs() const; - int aid_from_lang(const char* lang) const; - int sid_from_lang(const char* lang) const; + int aid_from_lang(const std::string& lang) const; + int sid_from_lang(const std::string& lang) const; int lang_from_sid(int id) const; int next_title(int dvd_title); int next_cell(); @@ -153,9 +153,10 @@ int DvdRead_Stream_Interface::number_of_subs() const { return nr_of_subtitles; } -int DvdRead_Stream_Interface::aid_from_lang(const char* lang) const { +int DvdRead_Stream_Interface::aid_from_lang(const std::string& _lang) const { int code; unsigned i; + const char* lang=_lang.c_str(); while(lang && strlen(lang)>=2){ code=lang[1]|(lang[0]<<8); for(i=0;i<unsigned(nr_of_channels);i++){ @@ -171,9 +172,10 @@ return -1; } -int DvdRead_Stream_Interface::sid_from_lang(const char* lang) const { +int DvdRead_Stream_Interface::sid_from_lang(const std::string& _lang) const { int code; unsigned i; + const char* lang=_lang.c_str(); while(lang && strlen(lang)>=2){ code=lang[1]|(lang[0]<<8); for(i=0;i<unsigned(nr_of_subtitles);i++){ @@ -589,7 +591,7 @@ dvd_angle=1; } -MPXP_Rc DvdRead_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc DvdRead_Stream_Interface::open(const std::string& filename,unsigned flags) { UNUSED(flags); int dvd_title; @@ -598,7 +600,7 @@ char param[256]; last_title=-1; - if(strcmp(filename,"help") == 0 || strlen(filename)==10) { + if(filename=="help" || filename.length()==10) { MSG_HINT("Usage: dvdread://<@device>#<titleno>-<lasttitle>,<chapter>-<lastchapter>,<angle>\n"); return MPXP_False; } Modified: mplayerxp/libmpstream/s_file.cpp =================================================================== --- mplayerxp/libmpstream/s_file.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_file.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -25,7 +25,7 @@ File_Stream_Interface(libinput_t* libinput); virtual ~File_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -47,13 +47,13 @@ fd(0),was_open(0),spos(0) {} File_Stream_Interface::~File_Stream_Interface() {} -MPXP_Rc File_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc File_Stream_Interface::open(const std::string& filename,unsigned flags) { UNUSED(flags); - if(strcmp(filename,"-")==0) fd=0; - else fd=::open(filename,O_RDONLY); + if(filename=="-") fd=0; + else fd=::open(filename.c_str(),O_RDONLY); if(fd<0) { - MSG_ERR("[s_file] Cannot open file: '%s'\n",filename); + MSG_ERR("[s_file] Cannot open file: '%s'\n",filename.c_str()); return MPXP_False; } was_open = (fd==0)?0:1; @@ -117,12 +117,12 @@ Stdin_Stream_Interface(libinput_t* libinput); virtual ~Stdin_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); }; Stdin_Stream_Interface::Stdin_Stream_Interface(libinput_t*l):File_Stream_Interface(l) {} Stdin_Stream_Interface::~Stdin_Stream_Interface() {} -MPXP_Rc Stdin_Stream_Interface::open(const char *filename,unsigned flags) { +MPXP_Rc Stdin_Stream_Interface::open(const std::string& filename,unsigned flags) { UNUSED(filename); return File_Stream_Interface::open("-",flags); } Modified: mplayerxp/libmpstream/s_ftp.cpp =================================================================== --- mplayerxp/libmpstream/s_ftp.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_ftp.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -30,7 +30,7 @@ Ftp_Stream_Interface(libinput_t* libinput); virtual ~Ftp_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -45,7 +45,7 @@ int readresp(char* rsp); int OpenPort(); int OpenData(size_t newpos); - int SendCmd(const char *cmd,char* rsp); + int SendCmd(const std::string& cmd,char* rsp); const char* user; const char* pass; @@ -173,9 +173,10 @@ return r; } -int Ftp_Stream_Interface::SendCmd(const char *cmd,char* rsp) +int Ftp_Stream_Interface::SendCmd(const std::string& _cmd,char* rsp) { - int l = strlen(cmd); + const char* cmd=_cmd.c_str(); + int l = _cmd.length(); int hascrlf = cmd[l - 2] == '\r' && cmd[l - 1] == '\n'; if(hascrlf && l == 2) MSG_V("\n"); @@ -314,18 +315,15 @@ if(tcp.established()) tcp.close(); } -MPXP_Rc Ftp_Stream_Interface::open(const char *_filename,unsigned flags) +MPXP_Rc Ftp_Stream_Interface::open(const std::string& _filename,unsigned flags) { int resp; char str[256],rsp_txt[256]; - char *uname; + std::string uname; UNUSED(flags); - if(!(uname=new char [strlen(_filename)+7])) return MPXP_False; - strcpy(uname,"ftp://"); - strcat(uname,_filename); + uname=std::string("ftp://")+_filename; if(!(url=url_new(uname))) goto bad_url; - delete uname; // url = check4proxies (rurl); if(!(url->hostname && url->file)) { bad_url: Modified: mplayerxp/libmpstream/s_lavc.cpp =================================================================== --- mplayerxp/libmpstream/s_lavc.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_lavc.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -16,7 +16,7 @@ Lavs_Stream_Interface(libinput_t* libinput); virtual ~Lavs_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -67,15 +67,15 @@ void Lavs_Stream_Interface::close() {} -MPXP_Rc Lavs_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Lavs_Stream_Interface::open(const std::string& filename,unsigned flags) { int64_t _size; UNUSED(flags); av_register_all(); - MSG_V("[lavc] Opening %s\n", filename); + MSG_V("[lavc] Opening %s\n", filename.c_str()); - if (ffurl_open(&ctx, filename, 0, &int_cb, NULL) < 0) return MPXP_False; + if (ffurl_open(&ctx, filename.c_str(), 0, &int_cb, NULL) < 0) return MPXP_False; spos = 0; _size = ffurl_size(ctx); if (_size >= 0) end_pos = _size; Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -26,7 +26,7 @@ Network_Stream_Interface(libinput_t* libinput); virtual ~Network_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -53,14 +53,14 @@ } } -MPXP_Rc Network_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Network_Stream_Interface::open(const std::string& filename,unsigned flags) { UNUSED(flags); url = url_new(filename); if(url) { networking=new_networking(); if(networking_start(tcp,networking,url)!=MPXP_Ok){ - MSG_ERR(MSGTR_UnableOpenURL, filename); + MSG_ERR(MSGTR_UnableOpenURL, filename.c_str()); url_free(url); url=NULL; free_networking(networking); Modified: mplayerxp/libmpstream/s_null.cpp =================================================================== --- mplayerxp/libmpstream/s_null.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_null.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -13,7 +13,7 @@ Null_Stream_Interface(libinput_t* libinput); virtual ~Null_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -28,7 +28,7 @@ Null_Stream_Interface::Null_Stream_Interface(libinput_t*libinput):Stream_Interface(libinput) {} Null_Stream_Interface::~Null_Stream_Interface() {} -MPXP_Rc Null_Stream_Interface::open(const char *filename,unsigned flags) { +MPXP_Rc Null_Stream_Interface::open(const std::string& filename,unsigned flags) { UNUSED(filename); UNUSED(flags); return MPXP_False; Modified: mplayerxp/libmpstream/s_oss.cpp =================================================================== --- mplayerxp/libmpstream/s_oss.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_oss.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -33,7 +33,7 @@ Oss_Stream_Interface(libinput_t* libinput); virtual ~Oss_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -56,14 +56,14 @@ :Stream_Interface(libinput) {} Oss_Stream_Interface::~Oss_Stream_Interface() {} -MPXP_Rc Oss_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Oss_Stream_Interface::open(const std::string& filename,unsigned flags) { char *args; char *oss_device,*comma; unsigned tmp,param; int err; UNUSED(flags); - if(strcmp(filename,"help") == 0) { + if(filename=="help") { MSG_HINT("Usage: oss://<@device>#<channels>,<samplerate>,<sampleformat>\n"); return MPXP_False; } Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -32,7 +32,7 @@ Rtsp_Stream_Interface(libinput_t* libinput); virtual ~Rtsp_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -139,13 +139,13 @@ } extern int index_mode; -MPXP_Rc Rtsp_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Rtsp_Stream_Interface::open(const std::string& filename,unsigned flags) { URL_t *url; UNUSED(flags); - if(strncmp(filename,"rtsp://",7)!=0) return MPXP_False; + if(filename.substr(0,7)!="rtsp://") return MPXP_False; - MSG_V("STREAM_RTSP, URL: %s\n", filename); + MSG_V("STREAM_RTSP, URL: %s\n", filename.c_str()); networking = new_networking(); if (!networking) return MPXP_False; Modified: mplayerxp/libmpstream/s_tv.cpp =================================================================== --- mplayerxp/libmpstream/s_tv.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_tv.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -584,7 +584,7 @@ Tv_Stream_Interface(libinput_t* libinput); virtual ~Tv_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -602,7 +602,7 @@ Tv_Stream_Interface::Tv_Stream_Interface(libinput_t*libinput):Stream_Interface(libinput) {} Tv_Stream_Interface::~Tv_Stream_Interface() { delete priv; } -MPXP_Rc Tv_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Tv_Stream_Interface::open(const std::string& filename,unsigned flags) { UNUSED(flags); mrl_parse_params(filename,tvopts_conf); Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -31,7 +31,7 @@ Udp_Stream_Interface(libinput_t* libinput); virtual ~Udp_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -92,11 +92,11 @@ return MPXP_Ok; } -MPXP_Rc Udp_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc Udp_Stream_Interface::open(const std::string& filename,unsigned flags) { URL_t *url; UNUSED(flags); - MSG_V("STREAM_UDP, URL: %s\n", filename); + MSG_V("STREAM_UDP, URL: %s\n", filename.c_str()); networking = new_networking(); if (!networking) return MPXP_False; Modified: mplayerxp/libmpstream/s_vcdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -34,7 +34,7 @@ VcdNav_Stream_Interface(libinput_t* libinput); virtual ~VcdNav_Stream_Interface(); - virtual MPXP_Rc open(const char *filename,unsigned flags); + virtual MPXP_Rc open(const std::string& filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -73,10 +73,10 @@ if(segment) delete segment; } -static void __FASTCALL__ _cdio_detect_media(const char *device) +static void __FASTCALL__ _cdio_detect_media(const std::string& device) { CdIo_t *img; - img=cdio_open(device,DRIVER_UNKNOWN); + img=cdio_open(device.c_str(),DRIVER_UNKNOWN); if(img) { discmode_t mode=cdio_get_discmode(img); @@ -84,7 +84,7 @@ } } -MPXP_Rc VcdNav_Stream_Interface::open(const char *filename,unsigned flags) +MPXP_Rc VcdNav_Stream_Interface::open(const std::string& filename,unsigned flags) { const char *param; char *device,*dev; @@ -92,7 +92,7 @@ int vcd_track=-1; vcdinfo_open_return_t open_rc; UNUSED(flags); - if(strcmp(filename,"help") == 0) { + if(filename=="help") { MSG_HINT("Usage: vcdnav://<@device><#trackno>\n"); return MPXP_False; } Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/stream.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -120,7 +120,7 @@ int Stream::eof() const { return _eof; } void Stream::eof(int e) { if(!e) reset(); _eof = e; } -MPXP_Rc Stream::open(libinput_t*libinput,const char* filename,int* ff) +MPXP_Rc Stream::open(libinput_t*libinput,const std::string& filename,int* ff) { unsigned i,done; unsigned mrl_len; @@ -128,7 +128,7 @@ done=0; for(i=0;sdrivers[i]!=&null_stream;i++) { mrl_len=strlen(sdrivers[i]->mrl); - if(strncmp(filename,sdrivers[i]->mrl,mrl_len)==0||sdrivers[i]->mrl[0]=='*') { + if(filename.substr(0,mrl_len)==sdrivers[i]->mrl||sdrivers[i]->mrl[0]=='*') { MSG_V("Opening %s ... ",sdrivers[i]->mrl); Stream_Interface* drv = sdrivers[i]->query_interface(libinput); if(sdrivers[i]->mrl[0]=='*') mrl_len=0; Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/stream.h 2012-12-10 15:13:31 UTC (rev 533) @@ -58,7 +58,7 @@ static void print_drivers(); - virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format); + virtual MPXP_Rc open(libinput_t*libinput,const std::string& filename,int* file_format); virtual int read(any_t* mem,int total); virtual off_t seek(off_t off); virtual int skip(off_t len); Modified: mplayerxp/libmpstream/stream_internal.h =================================================================== --- mplayerxp/libmpstream/stream_internal.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/stream_internal.h 2012-12-10 15:13:31 UTC (rev 533) @@ -19,7 +19,7 @@ * @param filename points MRL of stream (vcdnav://, file://, http://, ...) * @param flags currently unused and filled as 0 **/ - virtual MPXP_Rc open(const char *filename,unsigned flags) = 0; + virtual MPXP_Rc open(const std::string& filename,unsigned flags) = 0; /** Reads next packet from stream * @param _this points structure which identifies stream Modified: mplayerxp/libmpstream/url.cpp =================================================================== --- mplayerxp/libmpstream/url.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/url.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -45,21 +45,20 @@ return res; } -URL_t* -url_new(const char* url) { +URL_t* url_new(const std::string& url) { int pos1, pos2,v6addr = 0; URL_t* Curl = NULL; char *escfilename=NULL; char *ptr1=NULL, *ptr2=NULL, *ptr3=NULL, *ptr4=NULL; int jumpSize = 3; - if( url==NULL ) return NULL; + if( url.empty()) return NULL; - if (strlen(url) > (std::numeric_limits<size_t>::max() / 3 - 1)) { + if (url.length() > (std::numeric_limits<size_t>::max() / 3 - 1)) { MSG_FATAL("MemAllocFailed\n"); goto err_out; } - escfilename=new char [strlen(url)*3+1]; + escfilename=new char [url.length()*3+1]; if (!escfilename ) { MSG_FATAL("MemAllocFailed\n"); goto err_out; @@ -241,10 +240,10 @@ /* Replace escape sequences in an URL (or a part of an URL) */ /* works like strcpy(), but without return argument */ void -url2string(char *outbuf, const char *inbuf) +url2string(char *outbuf, const std::string& inbuf) { unsigned char c,c1,c2; - int i,len=strlen(inbuf); + int i,len=inbuf.length(); for (i=0;i<len;i++){ c = inbuf[i]; if (c == '%' && i<len-2) { //must have 2 more chars @@ -311,8 +310,8 @@ /* Replace specific characters in the URL string by an escape sequence */ /* works like strcpy(), but without return argument */ void -string2url(char *outbuf, const char *_inbuf) { - char* inbuf=mp_strdup(_inbuf); +string2url(char *outbuf, const std::string& _inbuf) { + char* inbuf=mp_strdup(_inbuf.c_str()); int i = 0,j,len = strlen(inbuf); char* tmp,*in; char *unesc = NULL; Modified: mplayerxp/libmpstream/url.h =================================================================== --- mplayerxp/libmpstream/url.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libmpstream/url.h 2012-12-10 15:13:31 UTC (rev 533) @@ -6,7 +6,7 @@ #ifndef __URL_H #define __URL_H - +#include <string> //#define __URL_DEBUG namespace mpxp { @@ -20,12 +20,12 @@ char *password; } URL_t; - URL_t* url_new(const char* url); + URL_t* url_new(const std::string& url); void url_free(URL_t* url); URL_t *url_redirect(URL_t **url, const char *redir); - void url2string(char *outbuf, const char *inbuf); - void string2url(char *outbuf, const char *inbuf); + void url2string(char *outbuf, const std::string& inbuf); + void string2url(char *outbuf, const std::string& inbuf); #ifdef __URL_DEBUG void url_debug(URL_t* url); Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/video_out.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -170,22 +170,23 @@ return priv.video_out; } -MPXP_Rc Video_Output::init(const char *driver_name) const +MPXP_Rc Video_Output::init(const std::string& driver_name) const { - char* drv_name = NULL; - char * subdev = NULL; - if(driver_name) { - drv_name=mp_strdup(driver_name); - subdev = strchr(drv_name,':'); - if(subdev) { *subdev='\0'; subdev++; } + size_t offset; + std::string drv_name; + std::string subdev; + if(!driver_name.empty()) { + drv_name=driver_name; + offset=drv_name.find(':'); + if(offset!=std::string::npos) subdev = drv_name.substr(offset+1); } vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); unsigned i; - if(!drv_name) priv.video_out=vo_infos[0]; + if(drv_name.empty()) priv.video_out=vo_infos[0]; else for (i=0; vo_infos[i] != &null_vo_info; i++){ const vo_info_t *info = vo_infos[i]; - if(strcmp(info->short_name,drv_name) == 0){ + if(info->short_name==drv_name){ priv.video_out = vo_infos[i]; break; } @@ -194,7 +195,6 @@ if(priv.video_out) { priv.vo_iface=priv.video_out->query_interface(subdev); } - if(drv_name) delete drv_name; return priv.vo_iface?MPXP_Ok:MPXP_False; } @@ -312,7 +312,7 @@ } 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 d_height, vo_flags_e _fullscreen, const std::string& title, uint32_t format) { vo_priv_t& priv=*static_cast<vo_priv_t*>(vo_priv); @@ -338,7 +338,7 @@ 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)); + ,w,h,d_w,d_h,_fullscreen,title.c_str(),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) { Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/video_out.h 2012-12-10 15:13:31 UTC (rev 533) @@ -13,6 +13,7 @@ #include "osdep/mplib.h" using namespace mpxp; +#include <string> #include <inttypes.h> #include <stdarg.h> @@ -50,7 +51,7 @@ /** Text description of VO-driver */ class VO_Interface; - typedef VO_Interface* (*query_interface_t)(const char* args); + typedef VO_Interface* (*query_interface_t)(const std::string& args); struct vo_info_t { const char* name; /**< driver name ("Matrox Millennium G200/G400") */ const char* short_name; /**< short name (for config strings) ("mga") */ @@ -166,12 +167,14 @@ void FLIP_UNSET() { flags&=~VOFLAG_FLIPPING; } void FLIP_REVERT() { flags^=VOFLAG_FLIPPING; } - virtual MPXP_Rc init(const char *driver_name) const; + virtual MPXP_Rc init(const std::string& driver_name) const; virtual void print_help() const; virtual const vo_info_t* get_info() const; - 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 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 std::string& title, + uint32_t format); virtual uint32_t query_format(uint32_t* fourcc,unsigned src_w,unsigned src_h) const; virtual MPXP_Rc reset() const; Modified: mplayerxp/libvo/video_out_internal.h =================================================================== --- mplayerxp/libvo/video_out_internal.h 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/video_out_internal.h 2012-12-10 15:13:31 UTC (rev 533) @@ -23,11 +23,12 @@ #ifndef __VIDEO_OUT_INTERNAL_H #define __VIDEO_OUT_INTERNAL_H 1 #include "dri_vo.h" +#include <string> namespace mpxp { class VO_Interface : public Opaque { public: - VO_Interface(const char *args) { UNUSED(args); }; + VO_Interface(const std::string& args) { UNUSED(args); }; virtual ~VO_Interface() {}; virtual MPXP_Rc configure(uint32_t width, @@ -35,7 +36,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format) = 0; virtual MPXP_Rc select_frame(unsigned idx) = 0; virtual MPXP_Rc flush_page(unsigned idx) { UNUSED(idx); return MPXP_NA; } Modified: mplayerxp/libvo/vo_fbdev.cpp =================================================================== --- mplayerxp/libvo/vo_fbdev.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_fbdev.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -109,7 +109,7 @@ class FBDev_VO_Interface : public VO_Interface { public: - FBDev_VO_Interface(const char* args); + FBDev_VO_Interface(const std::string& args); virtual ~FBDev_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -117,7 +117,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual MPXP_Rc flush_page(unsigned idx); @@ -130,8 +130,8 @@ virtual MPXP_Rc ctrl(uint32_t request, any_t*data); private: MPXP_Rc fb_preinit(); - const char* parse_sub_device(const char *sd); - int parse_fbmode_cfg(const char *cfgfile); + std::string parse_sub_device(const std::string& sd); + int parse_fbmode_cfg(const std::string& cfgfile); int get_token(int num); void vt_set_textarea(int u, int l); void lots_of_printf() const; @@ -189,11 +189,11 @@ MPXP_Rc fb_works; }; -const char* FBDev_VO_Interface::parse_sub_device(const char *sd) +std::string FBDev_VO_Interface::parse_sub_device(const std::string& sd) { const char *param; #ifdef CONFIG_VIDIX - if(memcmp(sd,"vidix",5) == 0) return &sd[5]; /* vidix_name will be valid within init() */ + if(sd.substr(0,5)=="vidix") return &sd[5]; /* vidix_name will be valid within init() */ else #endif { @@ -292,16 +292,16 @@ #endif } -FBDev_VO_Interface::FBDev_VO_Interface(const char *arg) +FBDev_VO_Interface::FBDev_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)) { - const char *vidix_name=NULL; - if(arg) vidix_name=parse_sub_device(arg); + std::string vidix_name; + if(!arg.empty()) vidix_name=parse_sub_device(arg); #ifdef CONFIG_VIDIX - if(vidix_name) { + if(!vidix_name.empty()) { if(!(vidix=new(zeromem) Vidix_System(vidix_name))) { - MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name); + MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name.c_str()); exit_player("Vidix error"); } } @@ -361,7 +361,7 @@ static fb_mode_t *fb_modes = NULL; static int nr_modes = 0; -int FBDev_VO_Interface::parse_fbmode_cfg(const char *cfgfile) +int FBDev_VO_Interface::parse_fbmode_cfg(const std::string& cfgfile) { #define CHECK_IN_MODE_DEF\ do {\ @@ -376,14 +376,14 @@ int in_mode_def = 0; int tmp, i; - MSG_DBG2("Reading %s: ", cfgfile); + MSG_DBG2("Reading %s: ", cfgfile.c_str()); - if ((fp = fopen(cfgfile, "r")) == NULL) { - MSG_ERR("can't open '%s': %s\n", cfgfile, strerror(errno)); + if ((fp = fopen(cfgfile.c_str(), "r")) == NULL) { + MSG_ERR("can't open '%s': %s\n", cfgfile.c_str(), strerror(errno)); return -1; } - if ((line = (char *) mp_malloc(MAX_LINE_LEN + 1)) == NULL) { + if ((line = new char[MAX_LINE_LEN + 1]) == NULL) { MSG_ERR("can't get memory for 'line': %s\n", strerror(errno)); return -2; } @@ -894,7 +894,7 @@ } MPXP_Rc FBDev_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, - uint32_t d_height, unsigned _flags, const char *title, + uint32_t d_height, unsigned _flags, const std::string& title, uint32_t format) { struct fb_cmap *cmap; @@ -1206,7 +1206,7 @@ return MPXP_NA; } -static VO_Interface* query_interface(const char* args) { return new(zeromem) FBDev_VO_Interface(args); } +static VO_Interface* query_interface(const std::string& args) { return new(zeromem) FBDev_VO_Interface(args); } extern const vo_info_t fbdev_vo_info = { "Framebuffer Device" #ifdef CONFIG_VIDIX Modified: mplayerxp/libvo/vo_null.cpp =================================================================== --- mplayerxp/libvo/vo_null.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_null.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -41,7 +41,7 @@ namespace mpxp { class Null_VO_Interface : public VO_Interface { public: - Null_VO_Interface(const char* args); + Null_VO_Interface(const std::string& args); virtual ~Null_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -49,7 +49,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual void get_surface_caps(dri_surface_cap_t *caps) const; @@ -74,7 +74,7 @@ return MPXP_Ok; } -MPXP_Rc Null_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned flags,const char *title, uint32_t format) +MPXP_Rc Null_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned flags,const std::string& title, uint32_t format) { unsigned awidth; size_t i; @@ -139,10 +139,10 @@ } } -Null_VO_Interface::Null_VO_Interface(const char *arg) +Null_VO_Interface::Null_VO_Interface(const std::string& arg) :VO_Interface(arg) { - if(arg) MSG_ERR("vo_null: Unknown subdevice: %s\n",arg); + if(!arg.empty()) MSG_ERR("vo_null: Unknown subdevice: %s\n",arg.c_str()); } void Null_VO_Interface::get_surface_caps(dri_surface_cap_t *caps) const @@ -224,10 +224,12 @@ } MPXP_Rc Null_VO_Interface::ctrl(uint32_t request, any_t*data) { + UNUSED(request); + UNUSED(data); return MPXP_NA; } -static VO_Interface* query_interface(const char* args) { return new(zeromem) Null_VO_Interface(args); } +static VO_Interface* query_interface(const std::string& args) { return new(zeromem) Null_VO_Interface(args); } extern const vo_info_t null_vo_info = { "Null video output", "null", Modified: mplayerxp/libvo/vo_opengl.cpp =================================================================== --- mplayerxp/libvo/vo_opengl.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_opengl.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -55,7 +55,7 @@ namespace mpxp { class OpenGL_VO_Interface : public VO_Interface { public: - OpenGL_VO_Interface(const char* args); + OpenGL_VO_Interface(const std::string& args); virtual ~OpenGL_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -63,7 +63,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual void get_surface_caps(dri_surface_cap_t *caps) const; @@ -94,7 +94,7 @@ LocalPtr<GLX_System> glx; }; -OpenGL_VO_Interface::OpenGL_VO_Interface(const char *arg) +OpenGL_VO_Interface::OpenGL_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)), glx(new(zeromem) GLX_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) @@ -158,7 +158,7 @@ /* connect to server, create and map window, * allocate colors and (shared) memory */ -MPXP_Rc OpenGL_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned _flags, const char *title, uint32_t format) +MPXP_Rc OpenGL_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned _flags, const std::string& title, uint32_t format) { int is_bgr; XSizeHints hint; @@ -289,10 +289,12 @@ } MPXP_Rc OpenGL_VO_Interface::ctrl(uint32_t request, any_t*data) { + UNUSED(request); + UNUSED(data); return MPXP_NA; } -static VO_Interface* query_interface(const char* args) { return new(zeromem) OpenGL_VO_Interface(args); } +static VO_Interface* query_interface(const std::string& args) { return new(zeromem) OpenGL_VO_Interface(args); } extern const vo_info_t opengl_vo_info = { "X11 (OpenGL)", Modified: mplayerxp/libvo/vo_sdl.cpp =================================================================== --- mplayerxp/libvo/vo_sdl.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_sdl.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -167,7 +167,7 @@ class SDL_VO_Interface : public VO_Interface { public: - SDL_VO_Interface(const char* args); + SDL_VO_Interface(const std::string& args); virtual ~SDL_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -175,7 +175,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual MPXP_Rc flush_page(unsigned idx); @@ -197,7 +197,7 @@ void erase_rectangle(unsigned idx,int x, int y, int w, int h); void lock_surfaces(); void unlock_surfaces(); - const char* parse_sub_device(const char *sd) const; + std::string parse_sub_device(const std::string& sd) const; std::string sdl_subdevice; @@ -243,12 +243,12 @@ } /** Private SDL Data structure **/ -const char* SDL_VO_Interface::parse_sub_device(const char *sd) const +std::string SDL_VO_Interface::parse_sub_device(const std::string& sd) const { #ifdef CONFIG_VIDIX - if(memcmp(sd,"vidix",5) == 0) return &sd[5]; /* vidix_name will be valid within init() */ + if(sd.substr(0,5)=="vidix") return &sd[5]; /* vidix_name will be valid within init() */ #endif - return NULL; + return ""; } SDL_VO_Interface::~SDL_VO_Interface() @@ -263,22 +263,22 @@ #endif } -SDL_VO_Interface::SDL_VO_Interface(const char *arg) +SDL_VO_Interface::SDL_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)) #ifdef HAVE_X11 ,x11(new(zeromem) X11_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) #endif { - const char* vidix_name=NULL; + std::string vidix_name; num_buffs = 1; surface = NULL; - if(arg) sdl_subdevice=arg; - if(arg) vidix_name = parse_sub_device(arg); + if(!arg.empty()) sdl_subdevice=arg; + if(!arg.empty()) vidix_name = parse_sub_device(arg); #ifdef CONFIG_VIDIX - if(vidix_name) { + if(!vidix_name.empty()) { if(!(vidix=new(zeromem) Vidix_System(vidix_name))) { - MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name); + MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name.c_str()); exit_player("Vidix error"); } } @@ -543,7 +543,7 @@ * returns : non-zero on success, zero on error. **/ -MPXP_Rc SDL_VO_Interface::configure(uint32_t _width, uint32_t _height, uint32_t d_width, uint32_t d_height,unsigned _flags, const char *title, uint32_t _format) +MPXP_Rc SDL_VO_Interface::configure(uint32_t _width, uint32_t _height, uint32_t d_width, uint32_t d_height,unsigned _flags, const std::string& title, uint32_t _format) //static int sdl_setup (int width, int height) { MPXP_Rc retval; @@ -601,7 +601,7 @@ format = _format; /* Set output window title */ - SDL_WM_SetCaption (".: MPlayerXP : F = Fullscreen/Windowed : C = Cycle Fullscreen Resolutions :.", title); + SDL_WM_SetCaption (".: MPlayerXP : F = Fullscreen/Windowed : C = Cycle Fullscreen Resolutions :.", title.c_str()); if(mode == GL) { switch(_format){ @@ -1247,7 +1247,7 @@ return MPXP_NA; } -static VO_Interface* query_interface(const char* args) { return new(zeromem) SDL_VO_Interface(args); } +static VO_Interface* query_interface(const std::string& args) { return new(zeromem) SDL_VO_Interface(args); } extern const vo_info_t sdl_vo_info = { "SDL YUV/RGB/BGR renderer (SDL v1.1.7+ !)" #ifdef CONFIG_VIDIX Modified: mplayerxp/libvo/vo_vesa.cpp =================================================================== --- mplayerxp/libvo/vo_vesa.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_vesa.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -60,7 +60,7 @@ class VESA_VO_Interface : public VO_Interface { public: - VESA_VO_Interface(const char* args); + VESA_VO_Interface(const std::string& args); virtual ~VESA_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -68,7 +68,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual MPXP_Rc flush_page(unsigned idx); @@ -80,7 +80,7 @@ virtual uint32_t check_events(const vo_resize_t*); virtual MPXP_Rc ctrl(uint32_t request, any_t*data); private: - const char* parse_sub_device(const char *sd); + std::string parse_sub_device(const std::string& sd); int has_dga() const { return win.idx == -1; } int valid_win_frame(unsigned long offset) const { return offset >= win.low && offset < win.high; } any_t* video_ptr(unsigned long offset) const { return win.ptr + offset - win.low; } @@ -159,21 +159,21 @@ #endif } -VESA_VO_Interface::VESA_VO_Interface(const char *arg) +VESA_VO_Interface::VESA_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)) { - const char* vidix_name=NULL; + std::string vidix_name; MPXP_Rc pre_init_err = MPXP_Ok; subdev_flags = 0xFFFFFFFEUL; cpy_blk_fnc=NULL; - MSG_DBG2("vo_vesa: preinit(%s) was called\n",arg); - MSG_DBG3("vo_vesa: subdevice %s is being initialized\n",arg); - if(arg) vidix_name = parse_sub_device(arg); + MSG_DBG2("vo_vesa: preinit(%s) was called\n",arg.c_str()); + MSG_DBG3("vo_vesa: subdevice %s is being initialized\n",arg.c_str()); + if(!arg.empty()) vidix_name = parse_sub_device(arg); #ifdef CONFIG_VIDIX - if(vidix_name) { + if(!vidix_name.empty()) { if(!(vidix=new(zeromem) Vidix_System(vidix_name))) { - MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name); + MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name.c_str()); exit_player("Vidix error"); } } @@ -309,18 +309,18 @@ #define SUBDEV_NODGA 0x00000001UL #define SUBDEV_FORCEDGA 0x00000002UL -const char* VESA_VO_Interface::parse_sub_device(const char *sd) +std::string VESA_VO_Interface::parse_sub_device(const std::string& sd) { subdev_flags = 0; - if(strcmp(sd,"nodga") == 0) { subdev_flags |= SUBDEV_NODGA; subdev_flags &= ~(SUBDEV_FORCEDGA); } + if(sd=="nodga") { subdev_flags |= SUBDEV_NODGA; subdev_flags &= ~(SUBDEV_FORCEDGA); } else - if(strcmp(sd,"dga") == 0) { subdev_flags &= ~(SUBDEV_NODGA); subdev_flags |= SUBDEV_FORCEDGA; } + if(sd=="dga") { subdev_flags &= ~(SUBDEV_NODGA); subdev_flags |= SUBDEV_FORCEDGA; } #ifdef CONFIG_VIDIX else - if(memcmp(sd,"vidix",5) == 0) return &sd[5]; /* priv.vidix_name will be valid within init() */ + if(sd.substr(0,5)=="vidix") return &sd[5]; /* priv.vidix_name will be valid within init() */ #endif - else { MSG_ERR("vo_vesa: Unknown subdevice: '%s'\n", sd); subdev_flags = 0xFFFFFFFFUL; } - return NULL; + else { MSG_ERR("vo_vesa: Unknown subdevice: '%s'\n", sd.c_str()); subdev_flags = 0xFFFFFFFFUL; } + return ""; } static int __FASTCALL__ check_depth(unsigned bpp) @@ -427,7 +427,7 @@ * bit 2 (0x04) enables software scaling (-zoom) * bit 3 (0x08) enables flipping (-flip) (NK: and for what?) */ -MPXP_Rc VESA_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned flags, const char *title, uint32_t format) +MPXP_Rc VESA_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned flags, const std::string& title, uint32_t format) { struct VbeInfoBlock vib; struct VesaModeInfoBlock vmib; @@ -594,8 +594,8 @@ if(use_scaler || fs_mode) { /* software scale */ if(use_scaler > 1) { - aspect.save(width,height,d_width,d_height,vmode_info.XResolution,vmode_info.YResolution); - aspect.calc(dstW,dstH,flags&VOFLAG_FULLSCREEN?Aspect::ZOOM:Aspect::NOZOOM); + aspect->save(width,height,d_width,d_height,vmode_info.XResolution,vmode_info.YResolution); + aspect->calc(dstW,dstH,flags&VOFLAG_FULLSCREEN?Aspect::ZOOM:Aspect::NOZOOM); } else if(fs_mode) { dstW = vmode_info.XResolution; dstH = vmode_info.YResolution; @@ -715,9 +715,9 @@ int x; if(mp_conf.verbose>1) paintBkGnd(); else clear_screen(); - x = (vmode_info.XResolution/vmode_info.XCharSize)/2-strlen(title)/2; + x = (vmode_info.XResolution/vmode_info.XCharSize)/2-title.length()/2; if(x < 0) x = 0; - vbeWriteString(x,0,7,title); + vbeWriteString(x,0,7,title.c_str()); } return MPXP_Ok; } @@ -803,7 +803,7 @@ return MPXP_NA; } -static VO_Interface* query_interface(const char* args) { return new(zeromem) VESA_VO_Interface(args); } +static VO_Interface* query_interface(const std::string& args) { return new(zeromem) VESA_VO_Interface(args); } extern const vo_info_t vesa_vo_info = { "VESA VBE 2.0 video output" Modified: mplayerxp/libvo/vo_x11.cpp =================================================================== --- mplayerxp/libvo/vo_x11.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_x11.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -54,7 +54,7 @@ namespace mpxp { class X11_VO_Interface : public VO_Interface { public: - X11_VO_Interface(const char* args); + X11_VO_Interface(const std::string& args); virtual ~X11_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -62,7 +62,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual MPXP_Rc flush_page(unsigned idx); @@ -75,7 +75,7 @@ virtual uint32_t check_events(const vo_resize_t*); virtual MPXP_Rc ctrl(uint32_t request, any_t*data); private: - const char* parse_sub_device(const char *sd); + std::string parse_sub_device(const std::string& sd); void resize(int x,int y) const; void display_image(XImage * myximage) const; void lock_surfaces(); @@ -118,32 +118,32 @@ #include <X11/extensions/XShm.h> #endif -const char* X11_VO_Interface::parse_sub_device(const char *sd) +std::string X11_VO_Interface::parse_sub_device(const std::string& sd) { #ifdef CONFIG_VIDIX - if(memcmp(sd,"vidix",5) == 0) return &sd[5]; /* vidix_name will be valid within init() */ + if(sd.substr(0,5)=="vidix") return &sd[5]; /* vidix_name will be valid within init() */ #endif - MSG_ERR("vo_x11: Unknown subdevice: '%s'\n", sd); - return NULL; + MSG_ERR("vo_x11: Unknown subdevice: '%s'\n", sd.c_str()); + return ""; } -X11_VO_Interface::X11_VO_Interface(const char *arg) +X11_VO_Interface::X11_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)), x11(new(zeromem) X11_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) { - const char* vidix_name=NULL; + std::string vidix_name; num_buffers=1; pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutex_init(&surfaces_mutex,&attr); - if(arg) vidix_name = parse_sub_device(arg); + if(!arg.empty()) vidix_name = parse_sub_device(arg); #ifdef CONFIG_VIDIX - if(vidix_name) { -MSG_INFO("args=%s vidix-name=%s\n",arg,vidix_name); + if(!vidix_name.empty()) { +MSG_INFO("args=%s vidix-name=%s\n",arg.c_str(),vidix_name.c_str()); if(!(vidix=new(zeromem) Vidix_System(vidix_name))) { - MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name); + MSG_ERR("Cannot initialze vidix with '%s' argument\n",vidix_name.c_str()); exit_player("Vidix error"); } } @@ -214,7 +214,7 @@ return ret; } -MPXP_Rc X11_VO_Interface::configure(uint32_t width,uint32_t height,uint32_t d_width,uint32_t d_height,unsigned _flags,const char *title,uint32_t format) +MPXP_Rc X11_VO_Interface::configure(uint32_t width,uint32_t height,uint32_t d_width,uint32_t d_height,unsigned _flags,const std::string& title,uint32_t format) { XSizeHints hint; unsigned i; @@ -425,7 +425,7 @@ return MPXP_NA; } -static VO_Interface* query_interface(const char* args) { return new(zeromem) X11_VO_Interface(args); } +static VO_Interface* query_interface(const std::string& args) { return new(zeromem) X11_VO_Interface(args); } extern const vo_info_t x11_vo_info = { "X11 ( XImage/Shm )" Modified: mplayerxp/libvo/vo_xv.cpp =================================================================== --- mplayerxp/libvo/vo_xv.cpp 2012-12-10 13:30:58 UTC (rev 532) +++ mplayerxp/libvo/vo_xv.cpp 2012-12-10 15:13:31 UTC (rev 533) @@ -42,7 +42,7 @@ namespace mpxp { class Xv_VO_Interface : public VO_Interface { public: - Xv_VO_Interface(const char* args); + Xv_VO_Interface(const std::string& args); virtual ~Xv_VO_Interface(); virtual MPXP_Rc configure(uint32_t width, @@ -50,7 +50,7 @@ uint32_t d_width, uint32_t d_height, unsigned flags, - const char *title, + const std::string& title, uint32_t format); virtual MPXP_Rc select_frame(unsigned idx); virtual void get_surface_caps(dri_surface_cap_t *caps) const; @@ -83,14 +83,14 @@ int XShmGetEventBase(Display*); // FIXME: dynamically allocate this stuff -Xv_VO_Interface::Xv_VO_Interface(const char *arg) +Xv_VO_Interface::Xv_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)), xv(new(zeromem) Xv_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) { num_buffers=1; - if(arg) { - MSG_ERR("vo_xv: Unknown subdevice: %s\n",arg); + if(!arg.empty()) { + MSG_ERR("vo_xv: Unknown subdevice: %s\n",arg.c_str()); exit_player("Xv error"); } } @@ -143,7 +143,7 @@ * connect to server, create and map window, * allocate colors and (shared) memory */ -MPXP_Rc Xv_VO_Interface::configure(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,unsigned _flags,const char *title, uint32_t _format) +MPXP_Rc Xv_VO_Interface::configure(uint32_t width, uint32_t height, u... [truncated message content] |
From: <nic...@us...> - 2012-12-10 13:31:08
|
Revision: 532 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=532&view=rev Author: nickols_k Date: 2012-12-10 13:30:58 +0000 (Mon, 10 Dec 2012) Log Message: ----------- compatibility with vidix.svn[353] changeset Modified Paths: -------------- mplayerxp/libvo/vidix_system.cpp mplayerxp/libvo/vidix_system.h Modified: mplayerxp/libvo/vidix_system.cpp =================================================================== --- mplayerxp/libvo/vidix_system.cpp 2012-12-10 13:18:14 UTC (rev 531) +++ mplayerxp/libvo/vidix_system.cpp 2012-12-10 13:30:58 UTC (rev 532) @@ -38,13 +38,15 @@ int munlock(const any_t*addr,size_t len) { return ENOSYS; } #endif -Vidix_System::Vidix_System(const char *drvname) - :vidix(new(zeromem) Vidix(drvname?drvname[0]==':'?&drvname[1]:drvname[0]?drvname:NULL:NULL, +Vidix_System::Vidix_System(const std::string& drvname) + :vidix(new(zeromem) Vidix(!drvname.empty()? + drvname[0]==':'? + drvname.substr(1):drvname:"", TYPE_OUTPUT, mp_conf.verbose)) { int err; - MSG_DBG2("vidix_preinit(%s) was called\n",drvname); + MSG_DBG2("vidix_preinit(%s) was called\n",drvname.c_str()); if(vidix->version() != VIDIX_VERSION) { MSG_FATAL("You have wrong version of VIDIX library\n"); exit_player("Vidix"); Modified: mplayerxp/libvo/vidix_system.h =================================================================== --- mplayerxp/libvo/vidix_system.h 2012-12-10 13:18:14 UTC (rev 531) +++ mplayerxp/libvo/vidix_system.h 2012-12-10 13:30:58 UTC (rev 532) @@ -26,7 +26,7 @@ struct Vidix_System : public video_private { public: - Vidix_System(const char *drvname); + Vidix_System(const std::string& drvname); virtual ~Vidix_System(); MPXP_Rc configure(unsigned src_width,unsigned src_height, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-10 13:18:27
|
Revision: 531 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=531&view=rev Author: nickols_k Date: 2012-12-10 13:18:14 +0000 (Mon, 10 Dec 2012) Log Message: ----------- convert cdda_priv_t into class CDD_Interface + using std::string Modified Paths: -------------- mplayerxp/libmpstream/cdd.h mplayerxp/libmpstream/cdda.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libvo/vo_sdl.cpp Modified: mplayerxp/libmpstream/cdd.h =================================================================== --- mplayerxp/libmpstream/cdd.h 2012-12-10 11:27:53 UTC (rev 530) +++ mplayerxp/libmpstream/cdd.h 2012-12-10 13:18:14 UTC (rev 531) @@ -7,18 +7,18 @@ struct libinput_t; struct cddb_data_t { - char cddb_hello[1024]; - unsigned long disc_id; - unsigned int tracks; - char *cache_dir; - char *freedb_server; - int freedb_proto_level; - int anonymous; - char category[100]; - char *xmcd_file; - size_t xmcd_file_size; - any_t*user_data; - libinput_t*libinput; + std::string cddb_hello; + unsigned long disc_id; + unsigned int tracks; + char* cache_dir; + const char* freedb_server; + int freedb_proto_level; + int anonymous; + std::string category; + char* xmcd_file; + size_t xmcd_file_size; + any_t* user_data; + libinput_t* libinput; }; struct cd_toc_t { @@ -26,7 +26,7 @@ }; struct cd_track_t { - char *name; + std::string name; unsigned int track_nb; unsigned int min; unsigned int sec; @@ -37,17 +37,29 @@ cd_track_t *next; }; - struct cd_info_t { - char *artist; - char *album; - char *genre; - unsigned int nb_tracks; - unsigned int min; - unsigned int sec; - unsigned msec; - cd_track_t *first; - cd_track_t *last; - cd_track_t *current; + class CD_Info : public Opaque { + public: + CD_Info(); + virtual ~CD_Info(); + + virtual cd_track_t* add_track(const char *track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length); + virtual cd_track_t* get_track(unsigned int track_nb) const; + + virtual void print() const; + virtual MPXP_Rc parse_xmcd(const char *_xmcd_file); + + std::string artist; + std::string album; + std::string genre; + private: + unsigned int nb_tracks; + unsigned int min; + unsigned int sec; + unsigned msec; + + cd_track_t *first; + cd_track_t *last; + cd_track_t *current; }; struct my_track_t { @@ -56,11 +68,25 @@ lsn_t end_sector; }; - struct cdda_priv : public Opaque { + class CDD_Interface : public Opaque { public: - cdda_priv(); - virtual ~cdda_priv(); + CDD_Interface(); + virtual ~CDD_Interface(); + virtual MPXP_Rc open_cdda(const char* dev,const char* track); + virtual MPXP_Rc open_cddb(libinput_t*,const char* dev,const char* track); + + virtual int read(char *buf,track_t* trackidx); + virtual void seek(off_t pos,track_t *trackidx); + virtual off_t tell() const; + virtual void close(); + virtual off_t start() const; + virtual off_t size() const; + virtual int channels(unsigned track_idx) const; + private: + lsn_t map_sector(lsn_t sector,track_t *tr); + unsigned long psa(unsigned long sector); + cdrom_drive_t* cd; my_track_t tracks[256]; /* hope that's enough */ unsigned min; @@ -71,19 +97,6 @@ lsn_t end_sector; }; - cd_info_t* __FASTCALL__ cd_info_new(); - void __FASTCALL__ cd_info_free(cd_info_t *cd_info); - cd_track_t* __FASTCALL__ cd_info_add_track(cd_info_t *cd_info, char *track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length); - cd_track_t* __FASTCALL__ cd_info_get_track(cd_info_t *cd_info, unsigned int track_nb); - - cdda_priv* __FASTCALL__ open_cdda(const char* dev,const char* track); - cdda_priv* __FASTCALL__ open_cddb(libinput_t*,const char* dev,const char* track); - int __FASTCALL__ read_cdda(cdda_priv* s,char *buf,track_t* trackidx); - void __FASTCALL__ seek_cdda(cdda_priv* s,off_t pos,track_t *trackidx); - off_t __FASTCALL__ tell_cdda(const cdda_priv* s); - void __FASTCALL__ close_cdda(cdda_priv*); - off_t __FASTCALL__ cdda_start(cdda_priv*); - off_t __FASTCALL__ cdda_size(cdda_priv*); void cdda_register_options(m_config_t* cfg); } // namespace mpxp #endif // __CDD_H__ Modified: mplayerxp/libmpstream/cdda.cpp =================================================================== --- mplayerxp/libmpstream/cdda.cpp 2012-12-10 11:27:53 UTC (rev 530) +++ mplayerxp/libmpstream/cdda.cpp 2012-12-10 13:18:14 UTC (rev 531) @@ -75,152 +75,144 @@ return rval; } -cdda_priv* __FASTCALL__ open_cdda(const char* dev,const char* arg) { +MPXP_Rc CDD_Interface::open_cdda(const char* dev,const char* arg) { unsigned cd_tracks; - cdda_priv* priv; unsigned int audiolen=0; unsigned i; unsigned char arr[256]; int st_inited; - priv = new(zeromem) cdda_priv; + cd = cdio_cddap_identify(dev,mp_conf.verbose?1:0,NULL); - priv->cd = cdio_cddap_identify(dev,mp_conf.verbose?1:0,NULL); - - if(!priv->cd) { + if(!cd) { MSG_ERR("Can't open cdda device: %s\n",dev); - delete priv; - return NULL; + return MPXP_False; } - cdio_cddap_verbose_set(priv->cd, mp_conf.verbose?CDDA_MESSAGE_PRINTIT:CDDA_MESSAGE_FORGETIT, mp_conf.verbose?CDDA_MESSAGE_PRINTIT:CDDA_MESSAGE_FORGETIT); + cdio_cddap_verbose_set(cd, mp_conf.verbose?CDDA_MESSAGE_PRINTIT:CDDA_MESSAGE_FORGETIT, mp_conf.verbose?CDDA_MESSAGE_PRINTIT:CDDA_MESSAGE_FORGETIT); - if(cdio_cddap_open(priv->cd) != 0) { + if(cdio_cddap_open(cd) != 0) { MSG_ERR("Can't open disc\n"); - cdda_close(priv->cd); - delete priv; - return NULL; + cdda_close(cd); + return MPXP_False; } - cd_tracks=cdio_cddap_tracks(priv->cd); + cd_tracks=cdio_cddap_tracks(cd); MSG_V("Found %d tracks on disc\n",cd_tracks); if(!arg[0]) - for(i=1;i<=cd_tracks;i++) priv->tracks[i-1].play=1; + for(i=1;i<=cd_tracks;i++) tracks[i-1].play=1; cdda_parse_tracks(arr,sizeof(arr)/sizeof(unsigned),arg); - for(i=1;i<=256;i++) if (arr[i]) priv->tracks[i-1].play=1; + for(i=1;i<=256;i++) if (arr[i]) tracks[i-1].play=1; st_inited=0; MSG_V("[CDDA] Queued tracks:"); for(i=0;i<cd_tracks;i++) { - if(priv->tracks[i].play) { - priv->tracks[i].start_sector=cdio_cddap_track_firstsector(priv->cd,i+1); - priv->tracks[i].end_sector=cdio_cddap_track_lastsector(priv->cd,i+1); - MSG_V(" %d[%d-%d]",i+1,priv->tracks[i].start_sector,priv->tracks[i].end_sector); - if(!st_inited) { priv->start_sector=priv->tracks[i].start_sector; st_inited=1; } - priv->end_sector=priv->tracks[i].end_sector; - audiolen += priv->tracks[i].end_sector-priv->tracks[i].start_sector+1; + if(tracks[i].play) { + tracks[i].start_sector=cdio_cddap_track_firstsector(cd,i+1); + tracks[i].end_sector=cdio_cddap_track_lastsector(cd,i+1); + MSG_V(" %d[%d-%d]",i+1,tracks[i].start_sector,tracks[i].end_sector); + if(!st_inited) { start_sector=tracks[i].start_sector; st_inited=1; } + end_sector=tracks[i].end_sector; + audiolen +=tracks[i].end_sector-tracks[i].start_sector+1; } } - for(;i<256;i++) priv->tracks[i].play=0; + for(;i<256;i++) tracks[i].play=0; MSG_V("\n"); - priv->min = (unsigned int)(audiolen/(60*75)); - priv->sec = (unsigned int)((audiolen/75)%60); - priv->msec = (unsigned int)(audiolen%75); + min = (unsigned int)(audiolen/(60*75)); + sec = (unsigned int)((audiolen/75)%60); + msec = (unsigned int)(audiolen%75); - if(speed) cdio_cddap_speed_set(priv->cd,speed); + if(speed) cdio_cddap_speed_set(cd,speed); - priv->sector = priv->start_sector; - return priv; + sector = start_sector; + return MPXP_Ok; } -off_t __FASTCALL__ cdda_start(cdda_priv* priv) { return priv->start_sector*CDIO_CD_FRAMESIZE_RAW; } -off_t __FASTCALL__ cdda_size(cdda_priv* priv) { return priv->end_sector*CDIO_CD_FRAMESIZE_RAW; } - -static lsn_t map_sector(cdda_priv*p,lsn_t sector,track_t *tr) +off_t CDD_Interface::start() const { return start_sector*CDIO_CD_FRAMESIZE_RAW; } +off_t CDD_Interface::size() const { return end_sector*CDIO_CD_FRAMESIZE_RAW; } +int CDD_Interface::channels(unsigned track_idx) const { return cdio_cddap_track_channels(cd, track_idx); } +lsn_t CDD_Interface::map_sector(lsn_t _sector,track_t *tr) { unsigned i,j; - lsn_t cd_track=sector; + lsn_t cd_track=_sector; for(i=0;i<256;i++){ - if(p->tracks[i].play && p->tracks[i].end_sector==sector) { - cd_track=0; - MSG_V("Found track changing. old track=%u Sector=%u",i,sector); - for(j=i+1;j<256;j++) { - if(p->tracks[j].play && p->tracks[j].start_sector==sector+1) { - cd_track=p->tracks[j].start_sector; - if(tr) *tr=j; - MSG_V("new track=%u Sector=%u",j,cd_track); - } + if(tracks[i].play && tracks[i].end_sector==_sector) { + cd_track=0; + MSG_V("Found track changing. old track=%u Sector=%u",i,_sector); + for(j=i+1;j<256;j++) { + if(tracks[j].play && tracks[j].start_sector==_sector+1) { + cd_track=tracks[j].start_sector; + if(tr) *tr=j; + MSG_V("new track=%u Sector=%u",j,cd_track); } + } } } return cd_track; } /* return physical sector address */ -static unsigned long psa(cdda_priv*p,unsigned long sector) +unsigned long CDD_Interface::psa(unsigned long _sector) { unsigned i; - unsigned long got_sectors=p->start_sector,track_len; + unsigned long got_sectors=start_sector,track_len; for(i=0;i<256;i++){ - if(p->tracks[i].play) { - track_len=p->tracks[i].end_sector-p->tracks[i].start_sector; - if(sector>=got_sectors && sector <= track_len) return sector+p->tracks[i].start_sector; + if(tracks[i].play) { + track_len=tracks[i].end_sector-tracks[i].start_sector; + if(_sector>=got_sectors && _sector <= track_len) return _sector+tracks[i].start_sector; got_sectors+=track_len; } } return 0; } -int __FASTCALL__ read_cdda(cdda_priv* p,char *buf,track_t *tr) { - track_t i=255; +int CDD_Interface::read(char *buf,track_t *tr) { + track_t i=255; - if(cdio_cddap_read(p->cd, buf, p->sector, 1)==0) { - MSG_ERR("[CD-DA]: read error occured\n"); - return -1; /* EOF */ - } - p->sector++; - if(p->sector == p->end_sector) { - MSG_DBG2("EOF was reached\n"); - return -1; /* EOF */ - } + if(cdio_cddap_read(cd, buf, sector, 1)==0) { + MSG_ERR("[CD-DA]: read error occured\n"); + return -1; /* EOF */ + } + sector++; + if(sector == end_sector) { + MSG_DBG2("EOF was reached\n"); + return -1; /* EOF */ + } - p->sector=map_sector(p,p->sector,&i); - if(!p->sector) return -1; - if(i!=255) { - *tr=i+1; - MSG_V("Track %d, sector=%d\n", *tr, p->sector); - } - else MSG_DBG2("Track %d, sector=%d\n", *tr, p->sector); - return CDIO_CD_FRAMESIZE_RAW; + sector=map_sector(sector,&i); + if(!sector) return -1; + if(i!=255) { + *tr=i+1; + MSG_V("Track %d, sector=%d\n", *tr, sector); + } else MSG_DBG2("Track %d, sector=%d\n", *tr, sector); + return CDIO_CD_FRAMESIZE_RAW; } -void __FASTCALL__ seek_cdda(cdda_priv* p,off_t pos,track_t *tr) { - long sec; +void CDD_Interface::seek(off_t pos,track_t *tr) { + long _sec; long seeked_track=0; track_t j=255; - sec = pos/CDIO_CD_FRAMESIZE_RAW; - MSG_DBG2("[CDDA] prepare seek to %ld\n",sec); - seeked_track=sec; + _sec = pos/CDIO_CD_FRAMESIZE_RAW; + MSG_DBG2("[CDDA] prepare seek to %ld\n",_sec); + seeked_track=_sec; *tr=255; - if( p->sector!=seeked_track ) { - seeked_track = map_sector(p,seeked_track,&j); + if( sector!=seeked_track ) { + seeked_track = map_sector(seeked_track,&j); if(seeked_track) *tr=j+1; } - p->sector=seeked_track; + sector=seeked_track; } -off_t __FASTCALL__ tell_cdda(const cdda_priv* p) { - return p->sector*CDIO_CD_FRAMESIZE_RAW; +off_t CDD_Interface::tell() const { + return sector*CDIO_CD_FRAMESIZE_RAW; } -void __FASTCALL__ close_cdda(cdda_priv* p) { - delete p; -} - -cdda_priv::cdda_priv() {} -cdda_priv::~cdda_priv() { +void CDD_Interface::close() { cdio_cddap_close(cd); } + +CDD_Interface::CDD_Interface() {} +CDD_Interface::~CDD_Interface() {} } // namespace mpxp #endif Modified: mplayerxp/libmpstream/cddb.cpp =================================================================== --- mplayerxp/libmpstream/cddb.cpp 2012-12-10 11:27:53 UTC (rev 530) +++ mplayerxp/libmpstream/cddb.cpp 2012-12-10 13:18:14 UTC (rev 531) @@ -57,7 +57,7 @@ static cd_toc_t cdtoc[100]; #if defined(__linux__) -int read_toc(void) { +static int read_toc(void) { int drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK); struct cdrom_tochdr tochdr; struct cdrom_tocentry tocentry; @@ -87,7 +87,7 @@ } #elif defined(SYS_BSD) -int read_toc(void) { +static int read_toc(void) { int drive = open("/dev/acd0c", O_RDONLY | O_NONBLOCK); struct ioc_toc_header tochdr; struct ioc_read_toc_single_entry tocentry; @@ -117,7 +117,7 @@ } #endif -unsigned int __FASTCALL__ cddb_sum(int n) { +static unsigned int __FASTCALL__ cddb_sum(int n) { unsigned int ret; ret = 0; @@ -128,7 +128,7 @@ return ret; } -unsigned long __FASTCALL__ cddb_discid(int tot_trks) { +static unsigned long __FASTCALL__ cddb_discid(int tot_trks) { unsigned int i, t = 0, n = 0; i = 0; @@ -141,7 +141,7 @@ return ((n % 0xff) << 24 | t << 8 | tot_trks); } -int __FASTCALL__ cddb_http_request(const char *command, int (*reply_parser)(HTTP_header_t*,cddb_data_t*), cddb_data_t *cddb_data) { +static int __FASTCALL__ cddb_http_request(const char *command, int (*reply_parser)(HTTP_header_t*,cddb_data_t*), cddb_data_t *cddb_data) { char request[4096]; int ret = 0; Tcp tcp(cddb_data->libinput,-1); @@ -150,7 +150,7 @@ if( reply_parser==NULL || command==NULL || cddb_data==NULL ) return -1; - sprintf( request, "http://%s/~cddb/cddb.cgi?cmd=%s%s&proto=%d", cddb_data->freedb_server, command, cddb_data->cddb_hello, cddb_data->freedb_proto_level ); + sprintf( request, "http://%s/~cddb/cddb.cgi?cmd=%s%s&proto=%d", cddb_data->freedb_server, command, cddb_data->cddb_hello.c_str(), cddb_data->freedb_proto_level ); MSG_V("Request[%s]\n", request ); url = url_new(request); @@ -190,7 +190,7 @@ return ret; } -int __FASTCALL__ cddb_read_cache(cddb_data_t *cddb_data) { +static int __FASTCALL__ cddb_read_cache(cddb_data_t *cddb_data) { char file_name[100]; struct stat stats; int file_fd, ret; @@ -214,7 +214,7 @@ file_size = stats.st_size; } - cddb_data->xmcd_file = (char*)mp_malloc(file_size); + cddb_data->xmcd_file = new char [file_size]; if( cddb_data->xmcd_file==NULL ) { MSG_FATAL("Memory allocation failed\n"); close(file_fd); @@ -232,7 +232,7 @@ return 0; } -int __FASTCALL__ cddb_write_cache(cddb_data_t *cddb_data) { +static int __FASTCALL__ cddb_write_cache(cddb_data_t *cddb_data) { // We have the file, save it for cache. char file_name[100]; int file_fd; @@ -321,80 +321,80 @@ return 0; } -int __FASTCALL__ cddb_request_titles(cddb_data_t *cddb_data) { - char command[1024]; - sprintf( command, "cddb+read+%s+%08lx", cddb_data->category, cddb_data->disc_id); - return cddb_http_request(command, cddb_read_parse, cddb_data); +static int __FASTCALL__ cddb_request_titles(cddb_data_t *cddb_data) { + char command[1024]; + sprintf( command, "cddb+read+%s+%08lx", cddb_data->category.c_str(), cddb_data->disc_id); + return cddb_http_request(command, cddb_read_parse, cddb_data); } static int cddb_query_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) { - char album_title[100]; - char *ptr = NULL; - int ret, status; + char album_title[100]; + char *ptr = NULL; + int ret, status; - ret = sscanf((char*)http_hdr->body, "%d ", &status); - if( ret!=1 ) { + ret = sscanf((char*)http_hdr->body, "%d ", &status); + if( ret!=1 ) { + MSG_ERR("Parse error\n"); + return -1; + } + + switch(status) { + case 200: + // Found exact match + ret = sscanf((char*)http_hdr->body, "%d %s %08lx %s", &status, cddb_data->category.c_str(), &(cddb_data->disc_id), album_title); + if( ret!=4 ) { MSG_ERR("Parse error\n"); return -1; - } - - switch(status) { - case 200: - // Found exact match - ret = sscanf((char*)http_hdr->body, "%d %s %08lx %s", &status, cddb_data->category, &(cddb_data->disc_id), album_title); - if( ret!=4 ) { - MSG_ERR("Parse error\n"); - return -1; - } - ptr = strstr((char*)http_hdr->body, album_title); - if( ptr!=NULL ) { - char *ptr2; - int len; - ptr2 = strstr(ptr, "\n"); - if( ptr2==NULL ) { - len = (http_hdr->body_size)-(ptr-(char*)(http_hdr->body)); - } else { - len = ptr2-ptr+1; - } - strncpy(album_title, ptr, len); - album_title[len-2]='\0'; - } - MSG_V("Parse OK, found: %s\n", album_title); - return cddb_request_titles(cddb_data); - case 202: - // No match found - MSG_ERR("Album not found\n"); - break; - case 210: - // Found exact matches, list follows - ptr = strstr((char*)http_hdr->body, "\n"); - if( ptr==NULL ) { - MSG_ERR("Unable to find end of line\n"); - return -1; - } - ptr++; - // We have a list of exact matches, so which one do - // we use? So let's take the first one. - ret = sscanf(ptr, "%s %08lx %s", cddb_data->category, &(cddb_data->disc_id), album_title); - if( ret!=3 ) { - MSG_ERR("Parse error\n"); - return -1; - } - ptr = strstr((char*)http_hdr->body, album_title); - if( ptr!=NULL ) { - char *ptr2; - int len; - ptr2 = strstr(ptr, "\n"); - if( ptr2==NULL ) { - len = (http_hdr->body_size)-(ptr-(char*)(http_hdr->body)); - } else { - len = ptr2-ptr+1; - } - strncpy(album_title, ptr, len); - album_title[len-2]='\0'; - } - MSG_V("Parse OK, found: %s\n", album_title); - return cddb_request_titles(cddb_data); + } + ptr = strstr((char*)http_hdr->body, album_title); + if( ptr!=NULL ) { + char *ptr2; + int len; + ptr2 = strstr(ptr, "\n"); + if( ptr2==NULL ) { + len = (http_hdr->body_size)-(ptr-(char*)(http_hdr->body)); + } else { + len = ptr2-ptr+1; + } + strncpy(album_title, ptr, len); + album_title[len-2]='\0'; + } + MSG_V("Parse OK, found: %s\n", album_title); + return cddb_request_titles(cddb_data); + case 202: + // No match found + MSG_ERR("Album not found\n"); + break; + case 210: + // Found exact matches, list follows + ptr = strstr((char*)http_hdr->body, "\n"); + if( ptr==NULL ) { + MSG_ERR("Unable to find end of line\n"); + return -1; + } + ptr++; + // We have a list of exact matches, so which one do + // we use? So let's take the first one. + ret = sscanf(ptr, "%s %08lx %s", cddb_data->category.c_str(), &(cddb_data->disc_id), album_title); + if( ret!=3 ) { + MSG_ERR("Parse error\n"); + return -1; + } + ptr = strstr((char*)http_hdr->body, album_title); + if( ptr!=NULL ) { + char *ptr2; + int len; + ptr2 = strstr(ptr, "\n"); + if( ptr2==NULL ) { + len = (http_hdr->body_size)-(ptr-(char*)(http_hdr->body)); + } else { + len = ptr2-ptr+1; + } + strncpy(album_title, ptr, len); + album_title[len-2]='\0'; + } + MSG_V("Parse OK, found: %s\n", album_title); + return cddb_request_titles(cddb_data); /* body=[210 Found exact matches, list follows (until terminating `.') misc c711930d Santana / Supernatural @@ -402,99 +402,99 @@ blues c711930d Santana / Supernatural .] */ - case 211: - // Found inexact matches, list follows - MSG_WARN("No exact matches found, list follows\n"); - break; - default: - MSG_ERR("Unhandled code\n"); - } - return -1; + case 211: + // Found inexact matches, list follows + MSG_WARN("No exact matches found, list follows\n"); + break; + default: + MSG_ERR("Unhandled code\n"); + } + return -1; } static int cddb_proto_level_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) { - int max; - int ret, status; - char *ptr; + int max; + int ret, status; + char *ptr; - ret = sscanf((char*)http_hdr->body, "%d ", &status); - if( ret!=1 ) { + ret = sscanf((char*)http_hdr->body, "%d ", &status); + if( ret!=1 ) { + MSG_ERR("Parse error\n"); + return -1; + } + + switch(status) { + case 210: + ptr = strstr((char*)http_hdr->body, "max proto:"); + if( ptr==NULL ) { MSG_ERR("Parse error\n"); return -1; - } - - switch(status) { - case 210: - ptr = strstr((char*)http_hdr->body, "max proto:"); - if( ptr==NULL ) { - MSG_ERR("Parse error\n"); - return -1; - } - ret = sscanf(ptr, "max proto: %d", &max); - if( ret!=1 ) { - MSG_ERR("Parse error\n"); - return -1; - } - cddb_data->freedb_proto_level = max; - return 0; - default: - MSG_ERR("Unhandled code\n"); - } - return -1; + } + ret = sscanf(ptr, "max proto: %d", &max); + if( ret!=1 ) { + MSG_ERR("Parse error\n"); + return -1; + } + cddb_data->freedb_proto_level = max; + return 0; + default: + MSG_ERR("Unhandled code\n"); + } + return -1; } -int __FASTCALL__ cddb_get_proto_level(cddb_data_t *cddb_data) { - return cddb_http_request("stat", cddb_proto_level_parse, cddb_data); +static int __FASTCALL__ cddb_get_proto_level(cddb_data_t *cddb_data) { + return cddb_http_request("stat", cddb_proto_level_parse, cddb_data); } static int cddb_freedb_sites_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) { - int ret, status; - UNUSED(cddb_data); - ret = sscanf((char*)http_hdr->body, "%d ", &status); - if( ret!=1 ) { - MSG_ERR("Parse error\n"); - return -1; - } - - switch(status) { - case 210: - // Parse the sites - return 0; - case 401: - MSG_ERR("No sites information available\n"); - break; - default: - MSG_ERR("Unhandled code\n"); - } + int ret, status; + UNUSED(cddb_data); + ret = sscanf((char*)http_hdr->body, "%d ", &status); + if( ret!=1 ) { + MSG_ERR("Parse error\n"); return -1; + } + + switch(status) { + case 210: + // Parse the sites + return 0; + case 401: + MSG_ERR("No sites information available\n"); + break; + default: + MSG_ERR("Unhandled code\n"); + } + return -1; } -int __FASTCALL__ cddb_get_freedb_sites(cddb_data_t *cddb_data) { - return cddb_http_request("sites", cddb_freedb_sites_parse, cddb_data); +static int __FASTCALL__ cddb_get_freedb_sites(cddb_data_t *cddb_data) { + return cddb_http_request("sites", cddb_freedb_sites_parse, cddb_data); } -void __FASTCALL__ cddb_create_hello(cddb_data_t *cddb_data) { - char host_name[51]; - const char *user_name; +static void __FASTCALL__ cddb_create_hello(cddb_data_t *cddb_data) { + char host_name[51]; + const char *user_name; - if( cddb_data->anonymous ) { // Default is anonymous - /* Note from Eduardo P\xE9rez Ureta <ep...@it...> : - * We don't send current user/host name in hello to prevent spam. - * Software that sends this is considered spyware - * that most people don't like. - */ - user_name = "anonymous"; - strcpy(host_name, "localhost"); - } else { - if( gethostname(host_name, 50)<0 ) { - strcpy(host_name, "localhost"); - } - user_name = getenv("LOGNAME"); + if( cddb_data->anonymous ) { // Default is anonymous + /* Note from Eduardo P\xE9rez Ureta <ep...@it...> : + * We don't send current user/host name in hello to prevent spam. + * Software that sends this is considered spyware + * that most people don't like. + */ + user_name = "anonymous"; + strcpy(host_name, "localhost"); + } else { + if( gethostname(host_name, 50)<0 ) { + strcpy(host_name, "localhost"); } - sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayerXP", VERSION); + user_name = getenv("LOGNAME"); + } + cddb_data->cddb_hello=std::string("&hello=")+user_name+"+"+host_name+"+"+"MPlayerXP"+"+"+VERSION; } -int __FASTCALL__ cddb_retrieve(cddb_data_t *cddb_data) { +static int __FASTCALL__ cddb_retrieve(cddb_data_t *cddb_data) { char offsets[1024], command[1024]; char *ptr; unsigned idx; @@ -528,7 +528,7 @@ return 0; } -MPXP_Rc __FASTCALL__ cddb_resolve(libinput_t*libinput,char **xmcd_file) { +static MPXP_Rc __FASTCALL__ cddb_resolve(libinput_t*libinput,char **xmcd_file) { char cddb_cache_dir[] = DEFAULT_CACHE_DIR; char *home_dir = NULL; cddb_data_t cddb_data; @@ -571,228 +571,183 @@ * *******************************************************************************************************************/ -cd_info_t* __FASTCALL__ cd_info_new() { - cd_info_t *cd_info = NULL; - - cd_info = (cd_info_t*)mp_mallocz(sizeof(cd_info_t)); - if( cd_info==NULL ) { - MSG_FATAL("Memory allocation failed\n"); - return NULL; +CD_Info::CD_Info() {} +CD_Info::~CD_Info() { + cd_track_t *cd_track, *cd_track_next; + cd_track_next = first; + while( cd_track_next!=NULL ) { + cd_track = cd_track_next; + cd_track_next = cd_track->next; + delete cd_track; } - - return cd_info; } -void __FASTCALL__ cd_info_free(cd_info_t *cd_info) { - cd_track_t *cd_track, *cd_track_next; - if( cd_info==NULL ) return; - if( cd_info->artist!=NULL ) delete cd_info->artist; - if( cd_info->album!=NULL ) delete cd_info->album; - if( cd_info->genre!=NULL ) delete cd_info->genre; +cd_track_t* CD_Info::add_track(const char *track_name, + unsigned int track_nb, + unsigned int _min, + unsigned int _sec, + unsigned int _msec, + unsigned long frame_begin, + unsigned long frame_length) { + cd_track_t *cd_track; - cd_track_next = cd_info->first; - while( cd_track_next!=NULL ) { - cd_track = cd_track_next; - cd_track_next = cd_track->next; - if( cd_track->name!=NULL ) delete cd_track->name; - delete cd_track; - } -} + if( track_name==NULL ) return NULL; -cd_track_t* __FASTCALL__ cd_info_add_track(cd_info_t *cd_info, char *track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length) { - cd_track_t *cd_track; - - if( cd_info==NULL || track_name==NULL ) return NULL; - - cd_track = (cd_track_t*)mp_mallocz(sizeof(cd_track_t)); - if( cd_track==NULL ) { + cd_track = new(zeromem) cd_track_t; + if( cd_track==NULL ) { MSG_FATAL("Memory allocation failed\n"); return NULL; - } - cd_track->name = (char*)mp_malloc(strlen(track_name)+1); - if( cd_track->name==NULL ) { - MSG_FATAL("Memory allocation failed\n"); - delete cd_track; - return NULL; - } - strcpy(cd_track->name, track_name); - cd_track->track_nb = track_nb; - cd_track->min = min; - cd_track->sec = sec; - cd_track->msec = msec; - cd_track->frame_begin = frame_begin; - cd_track->frame_length = frame_length; + } + cd_track->name=track_name; + cd_track->track_nb = track_nb; + cd_track->min = _min; + cd_track->sec = _sec; + cd_track->msec = _msec; + cd_track->frame_begin = frame_begin; + cd_track->frame_length = frame_length; - if( cd_info->first==NULL ) { - cd_info->first = cd_track; - } - if( cd_info->last!=NULL ) { - cd_info->last->next = cd_track; - } + if( first==NULL ) first = cd_track; + if( last!=NULL ) last->next = cd_track; - cd_track->prev = cd_info->last; + cd_track->prev = last; - cd_info->last = cd_track; - cd_info->current = cd_track; + last = cd_track; + current = cd_track; - cd_info->nb_tracks++; + nb_tracks++; - return cd_track; + return cd_track; } -cd_track_t* __FASTCALL__ cd_info_get_track(cd_info_t *cd_info, unsigned int track_nb) { - cd_track_t *cd_track=NULL; +cd_track_t* CD_Info::get_track(unsigned int track_nb) const { + cd_track_t *cd_track=NULL; - if( cd_info==NULL ) return NULL; - - cd_track = cd_info->first; - while( cd_track!=NULL ) { - if( cd_track->track_nb==track_nb ) { - return cd_track; - } - cd_track = cd_track->next; - } - return NULL; + cd_track = first; + while( cd_track!=NULL ) { + if( cd_track->track_nb==track_nb ) return cd_track; + cd_track = cd_track->next; + } + return NULL; } -void __FASTCALL__ cd_info_debug(cd_info_t *cd_info) { - cd_track_t *current_track; - MSG_INFO("================ CD INFO === start =========\n"); - if( cd_info==NULL ) { - MSG_INFO("cd_info is NULL\n"); - return; - } - MSG_INFO(" artist=[%s]\n" - " album=[%s]\n" - " genre=[%s]\n" - " nb_tracks=%d\n" - " length= %2d:%02d.%02d\n" - , cd_info->artist - , cd_info->album - , cd_info->genre - , cd_info->nb_tracks - , cd_info->min, cd_info->sec, cd_info->msec); - current_track = cd_info->first; - while( current_track!=NULL ) { - MSG_V(" #%2d %2d:%02d.%02d @ %7ld\t[%s] \n", current_track->track_nb, current_track->min, current_track->sec, current_track->msec, current_track->frame_begin, current_track->name); - current_track = current_track->next; - } - MSG_INFO("================ CD INFO === end =========\n"); +void CD_Info::print() const { + cd_track_t *current_track; + MSG_INFO("================ CD INFO === start =========\n"); + MSG_INFO(" artist=[%s]\n" + " album=[%s]\n" + " genre=[%s]\n" + " nb_tracks=%d\n" + " length= %2d:%02d.%02d\n" + , artist.c_str() + , album.c_str() + , genre.c_str() + , nb_tracks + , min, sec, msec); + current_track = first; + while( current_track!=NULL ) { + MSG_V(" #%2d %2d:%02d.%02d @ %7ld\t[%s] \n", current_track->track_nb, current_track->min, current_track->sec, current_track->msec, current_track->frame_begin, current_track->name.c_str()); + current_track = current_track->next; + } + MSG_INFO("================ CD INFO === end =========\n"); } -char* __FASTCALL__ xmcd_parse_dtitle(cd_info_t *cd_info, char *line) { - char *ptr, *album; - ptr = strstr(line, "DTITLE="); - if( ptr!=NULL ) { - ptr += 7; - album = strstr(ptr, "/"); - if( album==NULL ) return NULL; - cd_info->album = (char*)mp_malloc(strlen(album+2)+1); - if( cd_info->album==NULL ) { - return NULL; - } - strcpy( cd_info->album, album+2 ); - album--; - album[0] = '\0'; - cd_info->artist = (char*)mp_malloc(strlen(ptr)+1); - if( cd_info->artist==NULL ) { - return NULL; - } - strcpy( cd_info->artist, ptr ); - } - return ptr; +static char* __FASTCALL__ xmcd_parse_dtitle(CD_Info& cd_info,char *line) { + char *ptr, *album; + ptr = strstr(line, "DTITLE="); + if( ptr!=NULL ) { + ptr += 7; + album = strstr(ptr, "/"); + if( album==NULL ) return NULL; + cd_info.album=album+2; + album--; + album[0] = '\0'; + cd_info.artist=ptr; + } + return ptr; } -char* __FASTCALL__ xmcd_parse_dgenre(cd_info_t *cd_info, char *line) { - char *ptr; - ptr = strstr(line, "DGENRE="); - if( ptr!=NULL ) { - ptr += 7; - cd_info->genre = (char*)mp_malloc(strlen(ptr)+1); - if( cd_info->genre==NULL ) { - return NULL; - } - strcpy( cd_info->genre, ptr ); - } - return ptr; +char* __FASTCALL__ xmcd_parse_dgenre(CD_Info& cd_info,char *line) { + char *ptr; + ptr = strstr(line, "DGENRE="); + if( ptr!=NULL ) { + ptr += 7; + cd_info.genre=ptr; + } + return ptr; } -char* __FASTCALL__ xmcd_parse_ttitle(cd_info_t *cd_info, char *line) { - unsigned int track_nb; - unsigned long sec, off; - char *ptr; - ptr = strstr(line, "TTITLE"); - if( ptr!=NULL ) { - ptr += 6; - // Here we point to the track number - track_nb = atoi(ptr); - ptr = strstr(ptr, "="); - if( ptr==NULL ) return NULL; - ptr++; +static char* __FASTCALL__ xmcd_parse_ttitle(CD_Info& cd_info,char *line) { + unsigned int track_nb; + unsigned long sec, off; + char *ptr; + ptr = strstr(line, "TTITLE"); + if( ptr!=NULL ) { + ptr += 6; + // Here we point to the track number + track_nb = atoi(ptr); + ptr = strstr(ptr, "="); + if( ptr==NULL ) return NULL; + ptr++; - sec = cdtoc[track_nb].frame; - off = cdtoc[track_nb+1].frame-sec+1; + sec = cdtoc[track_nb].frame; + off = cdtoc[track_nb+1].frame-sec+1; - cd_info_add_track( cd_info, ptr, track_nb+1, (unsigned int)(off/(60*75)), (unsigned int)((off/75)%60), (unsigned int)(off%75), sec, off ); - } - return ptr; + cd_info.add_track( ptr, track_nb+1, (unsigned int)(off/(60*75)), (unsigned int)((off/75)%60), (unsigned int)(off%75), sec, off ); + } + return ptr; } -cd_info_t* __FASTCALL__ cddb_parse_xmcd(char *xmcd_file) { - cd_info_t *cd_info = NULL; - int length, pos = 0; - char *ptr, *ptr2; - unsigned int audiolen; - if( xmcd_file==NULL ) return NULL; +MPXP_Rc CD_Info::parse_xmcd(const char *_xmcd_file) { + int length, pos = 0; + char *ptr; + char *ptr2; + unsigned int audiolen; + if( _xmcd_file==NULL ) return MPXP_False; + char* xmcd_file = mp_strdup(_xmcd_file); - cd_info = cd_info_new(); - if( cd_info==NULL ) { - return NULL; + length = strlen(xmcd_file); + ptr = xmcd_file; + while( ptr!=NULL && pos<length ) { + // Read a line + ptr2 = ptr; + while( ptr2[0]!='\0' && ptr2[0]!='\r' && ptr2[0]!='\n' ) ptr2++; + if( ptr2[0]=='\0' ) break; + ptr2[0] = '\0'; + // Ignore comments + if( ptr[0]!='#' ) { + // Search for the album title + if( xmcd_parse_dtitle(*this, ptr) ); + // Search for the genre + else if( xmcd_parse_dgenre(*this, ptr) ); + // Search for a track title + else if( xmcd_parse_ttitle(*this, ptr) ){} } + if( ptr2[1]=='\n' ) ptr2++; + pos = (ptr2+1)-ptr; + ptr = ptr2+1; + } - length = strlen(xmcd_file); - ptr = xmcd_file; - while( ptr!=NULL && pos<length ) { - // Read a line - ptr2 = ptr; - while( ptr2[0]!='\0' && ptr2[0]!='\r' && ptr2[0]!='\n' ) ptr2++; - if( ptr2[0]=='\0' ) { - break; - } - ptr2[0] = '\0'; - // Ignore comments - if( ptr[0]!='#' ) { - // Search for the album title - if( xmcd_parse_dtitle(cd_info, ptr) ); - // Search for the genre - else if( xmcd_parse_dgenre(cd_info, ptr) ); - // Search for a track title - else if( xmcd_parse_ttitle(cd_info, ptr) ){} - } - if( ptr2[1]=='\n' ) ptr2++; - pos = (ptr2+1)-ptr; - ptr = ptr2+1; - } + audiolen = cdtoc[nb_tracks].frame-cdtoc[0].frame; + min = (unsigned int)(audiolen/(60*75)); + sec = (unsigned int)((audiolen/75)%60); + msec = (unsigned int)(audiolen%75); + delete xmcd_file; - audiolen = cdtoc[cd_info->nb_tracks].frame-cdtoc[0].frame; - cd_info->min = (unsigned int)(audiolen/(60*75)); - cd_info->sec = (unsigned int)((audiolen/75)%60); - cd_info->msec = (unsigned int)(audiolen%75); - - return cd_info; + return MPXP_Ok; } -cdda_priv* __FASTCALL__ open_cddb(libinput_t *libinput,const char *dev, const char *track) { - cd_info_t *cd_info = NULL; +MPXP_Rc CDD_Interface::open_cddb(libinput_t *libinput,const char *dev, const char *track) { char *xmcd_file = NULL; MPXP_Rc ret; ret = cddb_resolve(libinput,&xmcd_file); if( ret==MPXP_False ) { - cd_info = cddb_parse_xmcd(xmcd_file); + CD_Info& cd_info = *new(zeromem) CD_Info; + if(cd_info.parse_xmcd(xmcd_file)==MPXP_Ok) + cd_info.print(); delete xmcd_file; - cd_info_debug( cd_info ); - return NULL; + delete &cd_info; + return ret; } return open_cdda(dev, track); } Modified: mplayerxp/libmpstream/s_cdd.cpp =================================================================== --- mplayerxp/libmpstream/s_cdd.cpp 2012-12-10 11:27:53 UTC (rev 530) +++ mplayerxp/libmpstream/s_cdd.cpp 2012-12-10 13:18:14 UTC (rev 531) @@ -35,18 +35,20 @@ virtual off_t sector_size() const; virtual std::string mime_type() const; protected: - cdda_priv* priv; + CDD_Interface* priv; private: track_t track_idx; }; Cdda_Stream_Interface::Cdda_Stream_Interface(libinput_t* libinput) :Stream_Interface(libinput), + priv(new(zeromem) CDD_Interface), track_idx(255) {} -Cdda_Stream_Interface::~Cdda_Stream_Interface() {} +Cdda_Stream_Interface::~Cdda_Stream_Interface() { delete priv; } MPXP_Rc Cdda_Stream_Interface::open(const char *filename,unsigned flags) { + MPXP_Rc rc; const char *param; char *device; UNUSED(flags); @@ -55,38 +57,38 @@ return MPXP_False; } param=mrl_parse_line(filename,NULL,NULL,&device,NULL); - priv = open_cdda(device ? device : DEFAULT_CDROM_DEVICE,param); + rc = priv->open_cdda(device ? device : DEFAULT_CDROM_DEVICE,param); if(device) delete device; - return priv?MPXP_Ok:MPXP_False; + return rc; } Stream::type_e Cdda_Stream_Interface::type() const { return Stream::Type_RawAudio|Stream::Type_Seekable; } -off_t Cdda_Stream_Interface::start_pos() const { return cdda_start(priv); } -off_t Cdda_Stream_Interface::size() const { return cdda_size(priv); } +off_t Cdda_Stream_Interface::start_pos() const { return priv->start(); } +off_t Cdda_Stream_Interface::size() const { return priv->size(); } off_t Cdda_Stream_Interface::sector_size() const { return CD_FRAMESIZE_RAW; } std::string Cdda_Stream_Interface::mime_type() const { return "audio/PCMA"; } int Cdda_Stream_Interface::read(stream_packet_t*sp) { sp->type=0; - sp->len=read_cdda(priv,sp->buf,&track_idx); + sp->len=priv->read(sp->buf,&track_idx); return sp->len; } off_t Cdda_Stream_Interface::seek(off_t pos) { - seek_cdda(priv,pos,&track_idx); + priv->seek(pos,&track_idx); return pos; } off_t Cdda_Stream_Interface::tell() const { - return tell_cdda(priv); + return priv->tell(); } void Cdda_Stream_Interface::close() { - close_cdda(priv); + priv->close(); } MPXP_Rc Cdda_Stream_Interface::ctrl(unsigned cmd,any_t*args) @@ -99,7 +101,7 @@ } break; case SCTRL_AUD_GET_CHANNELS: - *(int *)args=cdio_cddap_track_channels(priv->cd, track_idx); + *(int *)args=priv->channels(track_idx); if(*(int *)args<=0) *(int *)args=2; MSG_V("cdda channels: %u\n",*(int *)args); return MPXP_Ok; @@ -152,9 +154,9 @@ return MPXP_False; } param=mrl_parse_line(filename,NULL,NULL,&device,NULL); - priv = open_cddb(libinput,device ? device : DEFAULT_CDROM_DEVICE,param); + retval = priv->open_cddb(libinput,device ? device : DEFAULT_CDROM_DEVICE,param); if(device) delete device; - return priv?MPXP_Ok:MPXP_False; + return retval; #else return MPXP_False; #endif Modified: mplayerxp/libvo/vo_sdl.cpp =================================================================== --- mplayerxp/libvo/vo_sdl.cpp 2012-12-10 11:27:53 UTC (rev 530) +++ mplayerxp/libvo/vo_sdl.cpp 2012-12-10 13:18:14 UTC (rev 531) @@ -200,8 +200,8 @@ const char* parse_sub_device(const char *sd) const; - char sdl_subdevice[100]; - char driver[8]; /* output driver used by sdl */ + std::string sdl_subdevice; + std::string driver; /* output driver used by sdl */ unsigned flags; LocalPtr<Aspect>aspect; SDL_Surface* surface; /* SDL display surface */ @@ -273,8 +273,7 @@ const char* vidix_name=NULL; num_buffs = 1; surface = NULL; - sdl_subdevice[0]='\0'; - if(arg) strcpy(sdl_subdevice,arg); + if(arg) sdl_subdevice=arg; if(arg) vidix_name = parse_sub_device(arg); #ifdef CONFIG_VIDIX if(vidix_name) { @@ -324,9 +323,10 @@ void SDL_VO_Interface::sdl_open( ) { + char drv[8]; const SDL_VideoInfo *vidInfo = NULL; MSG_DBG3("SDL: Opening Plugin\n"); - if(sdl_subdevice[0]) setenv("SDL_VIDEODRIVER", sdl_subdevice, 1); + if(!sdl_subdevice.empty()) setenv("SDL_VIDEODRIVER", sdl_subdevice.c_str(), 1); /* does the user want SDL to try and force Xv */ if(sdl_forcexv) setenv("SDL_VIDEO_X11_NODIRECTCOLOR", "1", 1); @@ -349,10 +349,11 @@ } #ifdef CONFIG_VIDIX - if(memcmp(sdl_subdevice,"vidix",5) != 0) + if(memcmp(sdl_subdevice.c_str(),"vidix",5) != 0) #endif - SDL_VideoDriverName(driver, 8); - MSG_OK("SDL: Using driver: %s\n", driver); + SDL_VideoDriverName(drv, 8); + driver=drv; + MSG_OK("SDL: Using driver: %s\n", driver.c_str()); /* other default values */ #ifdef SDL_NOHWSURFACE MSG_V("SDL: using software-surface\n"); @@ -682,11 +683,10 @@ retval = set_fullmode(fullmode); if(retval!=MPXP_Ok) return retval; } else { - if((strcmp(driver, "x11") == 0) - ||(strcmp(driver, "windib") == 0) - ||(strcmp(driver, "directx") == 0) - ||((strcmp(driver, "aalib") == 0) - && X)) { + if(driver=="x11" + ||driver=="windib" + ||driver=="directx" + ||(driver=="aalib" && X)) { MSG_V("SDL: setting windowed mode\n"); retval = set_video_mode(dstwidth, dstheight, bpp, sdlflags); if(retval!=MPXP_Ok) return retval; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-10 11:28:04
|
Revision: 530 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=530&view=rev Author: nickols_k Date: 2012-12-10 11:27:53 +0000 (Mon, 10 Dec 2012) Log Message: ----------- support for audio/PCMA mime-type Modified Paths: -------------- mplayerxp/libmpdemux/demuxer.cpp Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-10 11:24:29 UTC (rev 529) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-10 11:27:53 UTC (rev 530) @@ -317,46 +317,48 @@ } static const struct mime_type_table_t { - const char *mime_type; - const demuxer_driver_t* driver; + const char *mime_type; + const demuxer_driver_t* driver; } mime_type_table[] = { - // MP3 streaming, some MP3 streaming server answer with audio/mpeg - { "audio/mpeg", &demux_mp3 }, - // MPEG streaming - { "video/mpeg", &demux_mpgps }, - { "video/x-mpeg", &demux_mpgps }, - { "video/x-mpeg2", &demux_mpgps }, - // AVI ??? => video/x-msvideo - { "video/x-msvideo", &demux_avi }, - // MOV => video/quicktime - { "video/quicktime", &demux_mov }, - // ASF - { "audio/x-ms-wax", &demux_asf }, - { "audio/x-ms-wma", &demux_asf }, - { "video/x-ms-asf", &demux_asf }, - { "video/x-ms-afs", &demux_asf }, - { "video/x-ms-wvx", &demux_asf }, - { "video/x-ms-wmv", &demux_asf }, - { "video/x-ms-wma", &demux_asf }, - { "application/x-mms-framed", &demux_asf }, - { "application/vnd.ms.wms-hdr.asfv1", &demux_asf }, + // Raw-Audio + { "audio/PCMA", &demux_rawaudio }, + // MP3 streaming, some MP3 streaming server answer with audio/mpeg + { "audio/mpeg", &demux_mp3 }, + // MPEG streaming + { "video/mpeg", &demux_mpgps }, + { "video/x-mpeg", &demux_mpgps }, + { "video/x-mpeg2", &demux_mpgps }, + // AVI ??? => video/x-msvideo + { "video/x-msvideo", &demux_avi }, + // MOV => video/quicktime + { "video/quicktime", &demux_mov }, + // ASF + { "audio/x-ms-wax", &demux_asf }, + { "audio/x-ms-wma", &demux_asf }, + { "video/x-ms-asf", &demux_asf }, + { "video/x-ms-afs", &demux_asf }, + { "video/x-ms-wvx", &demux_asf }, + { "video/x-ms-wmv", &demux_asf }, + { "video/x-ms-wma", &demux_asf }, + { "application/x-mms-framed", &demux_asf }, + { "application/vnd.ms.wms-hdr.asfv1", &demux_asf }, #if 0 - // Playlists - { "video/x-ms-wmx", Demuxer::Type_PLAYLIST }, - { "video/x-ms-wvx", Demuxer::Type_PLAYLIST }, - { "audio/x-scpls", Demuxer::Type_PLAYLIST }, - { "audio/x-mpegurl", Demuxer::Type_PLAYLIST }, - { "audio/x-pls", Demuxer::Type_PLAYLIST }, + // Playlists + { "video/x-ms-wmx", Demuxer::Type_PLAYLIST }, + { "video/x-ms-wvx", Demuxer::Type_PLAYLIST }, + { "audio/x-scpls", Demuxer::Type_PLAYLIST }, + { "audio/x-mpegurl", Demuxer::Type_PLAYLIST }, + { "audio/x-pls", Demuxer::Type_PLAYLIST }, #endif - // Real Media - { "audio/x-pn-realaudio", &demux_realaud }, - // OGG Streaming - { "application/ogg", &demux_ogg }, - { "application/x-ogg", &demux_ogg }, - // NullSoft Streaming Video - { "video/nsv", &demux_nsv}, - { "misc/ultravox", &demux_nsv}, - { NULL, &demux_null } + // Real Media + { "audio/x-pn-realaudio", &demux_realaud }, + // OGG Streaming + { "application/ogg", &demux_ogg }, + { "application/x-ogg", &demux_ogg }, + // NullSoft Streaming Video + { "video/nsv", &demux_nsv}, + { "misc/ultravox", &demux_nsv}, + { NULL, &demux_null } }; static const demuxer_driver_t* demuxer_driver_by_name(const std::string& name) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-10 11:24:42
|
Revision: 529 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=529&view=rev Author: nickols_k Date: 2012-12-10 11:24:29 +0000 (Mon, 10 Dec 2012) Log Message: ----------- cleanups: remove avi_ni and avi_nini demuxers. New: added support for mime_type Modified Paths: -------------- mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_mp3.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer_info.cpp mplayerxp/libmpdemux/demuxer_info.h mplayerxp/libmpdemux/mux_mpxp64.cpp mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_lavc.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_null.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/stream_internal.h Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -23,7 +23,6 @@ #include "aviprint.h" #include "demux_msg.h" -typedef int (*alt_demuxer_t)(Demuxer *demux,Demuxer_Stream *__ds); struct avi_priv_t : public Opaque { public: avi_priv_t() {} @@ -54,7 +53,6 @@ unsigned int suidx_size; int nini; int is_odml; - alt_demuxer_t alt_demuxer; }; avi_priv_t::~avi_priv_t() { @@ -908,7 +906,6 @@ static int avi_demux(Demuxer *demux,Demuxer_Stream *__ds){ avi_priv_t *priv=static_cast<avi_priv_t*>(demux->priv); - if(priv->alt_demuxer) return priv->alt_demuxer(demux,__ds); unsigned int id=0; unsigned int len; int ret=0; @@ -986,12 +983,10 @@ MSG_WARN("\nBadly interleaved .AVI detected - switching to -ni mode...\n"); if(priv->idx_size>0){ // has index - priv->alt_demuxer = avi_read_ni; priv->nini=1; --priv->idx_pos; // hack } else { // no index - priv->alt_demuxer = avi_read_nini; priv->nini=1; priv->idx_pos=demux->filepos; // hack } @@ -1004,130 +999,6 @@ return 1; } - -// return value: -// 0 = EOF or no stream found -// 1 = successfully read a packet -static int avi_read_ni(Demuxer *demux,Demuxer_Stream* ds){ -avi_priv_t *priv=static_cast<avi_priv_t*>(demux->priv); -unsigned int id=0; -unsigned int len; -int ret=0; - -do{ - dp_flags_e flags=DP_KEYFRAME; - AVIINDEXENTRY *idx=NULL; - int idx_pos=0; - demux->filepos=demux->stream->tell(); - - if(ds==demux->video) idx_pos=priv->idx_pos_v++; else - if(ds==demux->audio) idx_pos=priv->idx_pos_a++; else - idx_pos=priv->idx_pos++; - - if(priv->idx_size>0 && idx_pos<priv->idx_size){ - off_t pos; - idx=&((AVIINDEXENTRY *)priv->idx)[idx_pos]; -// idx=&priv->idx[idx_pos]; - - if(idx->dwFlags&AVIIF_LIST){ - // LIST - continue; - } - if(ds && demux_avi_select_stream(demux,idx->ckid)!=ds){ - MSG_DBG3("Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid); - continue; // skip this chunk - } - - pos = priv->idx_offset+(unsigned long)idx->dwChunkOffset; - if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start)){ - MSG_V("ChunkOffset out of range! current=0x%X idx=0x%X \n",demux->filepos,pos); - continue; - } -#if 0 - if(pos!=demux->filepos){ - MSG_V("Warning! pos=0x%X idx.pos=0x%X diff=%d \n",demux->filepos,pos,pos-demux->filepos); - } -#endif - demux->stream->seek(pos); - - id=demux->stream->read_dword_le(); - - if(demux->stream->eof()) return 0; - - if(id!=idx->ckid){ - MSG_V("ChunkID mismatch! raw=%.4s idx=%.4s \n",(char *)&id,(char *)&idx->ckid); - if(valid_fourcc(idx->ckid)) - id=idx->ckid; // use index if valid - else - if(!valid_fourcc(id)) continue; // drop chunk if both id and idx bad - } - len=demux->stream->read_dword_le(); - if((len!=idx->dwChunkLength)&&((len+1)!=idx->dwChunkLength)){ - MSG_V("ChunkSize mismatch! raw=%d idx=%ld \n",len,idx->dwChunkLength); - if(len>0x200000 && idx->dwChunkLength>0x200000) continue; // both values bad :( - len=choose_chunk_len(idx->dwChunkLength,len); - } - if(!(idx->dwFlags&AVIIF_KEYFRAME)) flags=DP_NONKEYFRAME; - } else return 0; - ret=demux_avi_read_packet(demux,demux_avi_select_stream(demux,id),id,len,idx_pos,flags); -} while(ret!=1); - return 1; -} - - -// return value: -// 0 = EOF or no stream found -// 1 = successfully read a packet -static int avi_read_nini(Demuxer *demux,Demuxer_Stream* ds){ -avi_priv_t *priv=static_cast<avi_priv_t*>(demux->priv); -unsigned int id=0; -unsigned int len; -int ret=0; -off_t *fpos=NULL; - - if(ds==demux->video) fpos=&priv->idx_pos_v; else - if(ds==demux->audio) fpos=&priv->idx_pos_a; else - return 0; - - demux->stream->seek(fpos[0]); - -do{ - - demux->filepos=demux->stream->tell(); - if(demux->filepos>=demux->movi_end && (demux->movi_end>demux->movi_start)){ - ds->eof=1; - return 0; - } - if(demux->stream->eof()) return 0; - - id=demux->stream->read_dword_le(); - len=demux->stream->read_dword_le(); - - if(id==mmioFOURCC('L','I','S','T')){ - id=demux->stream->read_dword_le(); // list type - continue; - } - - if(id==mmioFOURCC('R','I','F','F')){ - MSG_V("additional RIFF header...\n"); - id=demux->stream->read_dword_le(); // "AVIX" - continue; - } - - if(ds==demux_avi_select_stream(demux,id)){ - // read it! - ret=demux_avi_read_packet(demux,ds,id,len,priv->idx_pos-1,DP_NONKEYFRAME); - } else { - // skip it! - int skip=(len+1)&(~1); // total bytes in this chunk - demux->stream->skip(skip); - } - -} while(ret!=1); - fpos[0]=demux->stream->tell(); - return 1; -} - int index_mode=-1; // -1=untouched 0=don't use index 1=use (geneate) index extern demuxer_driver_t demux_ogg; static Opaque* avi_open(Demuxer* demuxer){ Modified: mplayerxp/libmpdemux/demux_mp3.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mp3.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demux_mp3.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -170,7 +170,7 @@ 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,'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; @@ -243,7 +243,7 @@ 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('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; @@ -320,7 +320,7 @@ 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('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; @@ -511,7 +511,7 @@ sh_audio->i_bps=mp3_brate; sh_audio->rate=mp3_samplerate; sh_audio->nch=mp3_channels; - demuxer->movi_start-=4; + demuxer->movi_start-=HDR_SIZE; if(!read_mp3v1_tags(demuxer,hdr,pos)) return 0; /* id3v1 may coexist with id3v2 */ break; case RAW_MP3: @@ -519,7 +519,7 @@ sh_audio->i_bps=mp3_brate; sh_audio->rate=mp3_samplerate; sh_audio->nch=mp3_channels; - demuxer->movi_start-=4; + demuxer->movi_start-=HDR_SIZE; if(!read_mp3v1_tags(demuxer,hdr,pos)) return 0; /* id3v1 may coexist with id3v2 */ break; } Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -399,7 +399,7 @@ case mmioFOURCC('M','A','I','L'): infot=INFOT_MAIL; break; case mmioFOURCC('R','A','T','E'): infot=INFOT_RATING; break; case mmioFOURCC('C','M','T','S'): infot=INFOT_COMMENTS; break; - case mmioFOURCC('M','I','M','E'): infot=INFOT_MIME; break; +// case mmioFOURCC('M','I','M','E'): infot=INFOT_MIME; break; default: MSG_V("Unhandled contents descriptor %c%c%c%c %u bytes found\n", ((char *)&fourcc)[0],((char *)&fourcc)[1], ((char *)&fourcc)[2],((char *)&fourcc)[3], Modified: mplayerxp/libmpdemux/demux_real.cpp =================================================================== --- mplayerxp/libmpdemux/demux_real.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demux_real.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -946,12 +946,13 @@ tmps[tmp]=0; if(!demuxer->info().get(INFOT_DESCRIPTION)) demuxer->info().add( INFOT_DESCRIPTION, tmps); +#if 0 tmp=demuxer->stream->read_char(); demuxer->stream->read(tmps,tmp); tmps[tmp]=0; if(!demuxer->info().get(INFOT_MIME)) demuxer->info().add( INFOT_MIME, tmps); - +#endif /* Type specific header */ codec_data_size = demuxer->stream->read_dword(); codec_pos = demuxer->stream->tell(); Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -307,7 +307,6 @@ { INFOT_SOURCE_MEDIA,SCTRL_TXT_GET_STREAM_SOURCE_MEDIA }, { INFOT_RATING, SCTRL_TXT_GET_STREAM_RATING }, { INFOT_COMMENTS, SCTRL_TXT_GET_STREAM_COMMENT }, - { INFOT_MIME, SCTRL_TXT_GET_STREAM_MIME } }; static const demuxer_driver_t* demux_find_driver(const char *name) { @@ -317,6 +316,58 @@ return NULL; } +static const struct mime_type_table_t { + const char *mime_type; + const demuxer_driver_t* driver; +} mime_type_table[] = { + // MP3 streaming, some MP3 streaming server answer with audio/mpeg + { "audio/mpeg", &demux_mp3 }, + // MPEG streaming + { "video/mpeg", &demux_mpgps }, + { "video/x-mpeg", &demux_mpgps }, + { "video/x-mpeg2", &demux_mpgps }, + // AVI ??? => video/x-msvideo + { "video/x-msvideo", &demux_avi }, + // MOV => video/quicktime + { "video/quicktime", &demux_mov }, + // ASF + { "audio/x-ms-wax", &demux_asf }, + { "audio/x-ms-wma", &demux_asf }, + { "video/x-ms-asf", &demux_asf }, + { "video/x-ms-afs", &demux_asf }, + { "video/x-ms-wvx", &demux_asf }, + { "video/x-ms-wmv", &demux_asf }, + { "video/x-ms-wma", &demux_asf }, + { "application/x-mms-framed", &demux_asf }, + { "application/vnd.ms.wms-hdr.asfv1", &demux_asf }, +#if 0 + // Playlists + { "video/x-ms-wmx", Demuxer::Type_PLAYLIST }, + { "video/x-ms-wvx", Demuxer::Type_PLAYLIST }, + { "audio/x-scpls", Demuxer::Type_PLAYLIST }, + { "audio/x-mpegurl", Demuxer::Type_PLAYLIST }, + { "audio/x-pls", Demuxer::Type_PLAYLIST }, +#endif + // Real Media + { "audio/x-pn-realaudio", &demux_realaud }, + // OGG Streaming + { "application/ogg", &demux_ogg }, + { "application/x-ogg", &demux_ogg }, + // NullSoft Streaming Video + { "video/nsv", &demux_nsv}, + { "misc/ultravox", &demux_nsv}, + { NULL, &demux_null } +}; + +static const demuxer_driver_t* demuxer_driver_by_name(const std::string& name) +{ + unsigned i=0; + while(mime_type_table[i].driver!=&demux_null) { + if(name==mime_type_table[i].mime_type) return mime_type_table[i].driver; + } + return &demux_null; +} + MPXP_Rc Demuxer::open() { demuxer_priv_t& dpriv = static_cast<demuxer_priv_t&>(*demuxer_priv); @@ -355,6 +406,9 @@ MSG_V("False\n"); } if(!dpriv.driver) { + dpriv.driver=demuxer_driver_by_name(stream->mime_type()); + if(dpriv.driver!=&demux_null) goto force_driver; + dpriv.driver=NULL; err_exit: MSG_ERR(MSGTR_FormatNotRecognized); return MPXP_False; Modified: mplayerxp/libmpdemux/demuxer_info.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_info.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demuxer_info.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -22,8 +22,7 @@ "WWW", "Mail", "Rating", - "Comments", - "Mime" + "Comments" }; Demuxer_Info::Demuxer_Info() {} Modified: mplayerxp/libmpdemux/demuxer_info.h =================================================================== --- mplayerxp/libmpdemux/demuxer_info.h 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/demuxer_info.h 2012-12-10 11:24:29 UTC (rev 529) @@ -23,8 +23,7 @@ INFOT_MAIL =13, INFOT_RATING =14, INFOT_COMMENTS =15, - INFOT_MIME =16, - INFOT_MAX =16 + INFOT_MAX =15 }; struct Demuxer_Info : public Opaque { Modified: mplayerxp/libmpdemux/mux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/mux_mpxp64.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpdemux/mux_mpxp64.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -240,8 +240,8 @@ if(sname[0]) mpxpav64_put_frcc_unicode(f,"RATE",sname); if((sname=dinfo->info().get(INFOT_COMMENTS))!=NULL) if(sname[0]) mpxpav64_put_frcc_unicode(f,"CMTS",sname); - if((sname=dinfo->info().get(INFOT_MIME))!=NULL) - if(sname[0]) mpxpav64_put_frcc_unicode(f,"MIME",sname); +// 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/libmpstream/network.cpp =================================================================== --- mplayerxp/libmpstream/network.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/network.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -105,6 +105,7 @@ MSG_FATAL(MSGTR_OutOfMemory); return NULL; } + networking->mime="application/octet-stream"; return networking; } @@ -430,6 +431,8 @@ MSG_INFO("Public : %s\n", atoi(field_data)?"yes":"no"); field_data = NULL; if( (field_data = http_get_field(http_hdr, "icy-br")) != NULL ) MSG_INFO("Bitrate: %skbit/s\n", field_data); field_data = NULL; + if ( (field_data = http_get_field(http_hdr, "content-type")) != NULL ) + networking->mime = field_data; return MPXP_Ok; } case 400: // Server Full Modified: mplayerxp/libmpstream/network.h =================================================================== --- mplayerxp/libmpstream/network.h 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/network.h 2012-12-10 11:24:29 UTC (rev 529) @@ -7,6 +7,8 @@ #ifndef __NETWORK_H #define __NETWORK_H +#include <string> + #include <fcntl.h> #include <sys/time.h> #include <sys/types.h> @@ -55,6 +57,7 @@ struct networking_t { URL_t *url; + std::string mime; networking_status status; int buffering; // boolean unsigned int prebuffer_size; Modified: mplayerxp/libmpstream/s_cdd.cpp =================================================================== --- mplayerxp/libmpstream/s_cdd.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_cdd.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -33,6 +33,7 @@ virtual off_t start_pos() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; protected: cdda_priv* priv; private: @@ -63,6 +64,7 @@ off_t Cdda_Stream_Interface::start_pos() const { return cdda_start(priv); } off_t Cdda_Stream_Interface::size() const { return cdda_size(priv); } off_t Cdda_Stream_Interface::sector_size() const { return CD_FRAMESIZE_RAW; } +std::string Cdda_Stream_Interface::mime_type() const { return "audio/PCMA"; } int Cdda_Stream_Interface::read(stream_packet_t*sp) { Modified: mplayerxp/libmpstream/s_dvdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -64,6 +64,7 @@ virtual off_t size() const; virtual off_t sector_size() const; virtual float stream_pts() const; + virtual std::string mime_type() const; private: MPXP_Rc new_stream(const char * filename); void stream_ignore_timers(int ignore); @@ -238,6 +239,7 @@ off_t DvdNav_Stream_Interface::size() const { return -1; } off_t DvdNav_Stream_Interface::sector_size() const { return tevent?DVD_BLOCK_SIZE*10:DVD_BLOCK_SIZE; } float DvdNav_Stream_Interface::stream_pts() const { return _stream_pts; } +std::string DvdNav_Stream_Interface::mime_type() const { return "application/octet-stream"; } void DvdNav_Stream_Interface::stream_read(dvdnav_event_t*de) { int event = DVDNAV_NOP; Modified: mplayerxp/libmpstream/s_dvdread.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdread.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_dvdread.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -65,6 +65,7 @@ virtual off_t size() const; virtual off_t sector_size() const; virtual float stream_pts() const; + virtual std::string mime_type() const; private: int chapter_from_cell(int title,int cell); int number_of_subs() const; @@ -715,6 +716,7 @@ off_t DvdRead_Stream_Interface::size() const { return _end_pos; } off_t DvdRead_Stream_Interface::sector_size() const { return 2048; } float DvdRead_Stream_Interface::stream_pts() const { return _stream_pts; } +std::string DvdRead_Stream_Interface::mime_type() const { return "application/octet-stream"; } int DvdRead_Stream_Interface::read(stream_packet_t *sp) { Modified: mplayerxp/libmpstream/s_file.cpp =================================================================== --- mplayerxp/libmpstream/s_file.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_file.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -34,6 +34,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: int fd; int was_open; @@ -67,6 +68,7 @@ Stream::type_e File_Stream_Interface::type() const { return (end_pos==-1)?Stream::Type_Stream:Stream::Type_Seekable; } off_t File_Stream_Interface::size() const { return end_pos; } off_t File_Stream_Interface::sector_size() const { return STREAM_BUFFER_SIZE; } +std::string File_Stream_Interface::mime_type() const { return "application/octet-stream"; } int File_Stream_Interface::read(stream_packet_t*sp) { Modified: mplayerxp/libmpstream/s_ftp.cpp =================================================================== --- mplayerxp/libmpstream/s_ftp.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_ftp.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -39,6 +39,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: int readline(char *buf,int max); int readresp(char* rsp); @@ -421,6 +422,7 @@ Stream::type_e Ftp_Stream_Interface::type() const { return file_len?Stream::Type_Seekable:Stream::Type_Stream; } off_t Ftp_Stream_Interface::size() const { return file_len; } off_t Ftp_Stream_Interface::sector_size() const { return BUFSIZE; } +std::string Ftp_Stream_Interface::mime_type() const { return "application/octet-stream"; } MPXP_Rc Ftp_Stream_Interface::ctrl(unsigned cmd,any_t*args) { UNUSED(cmd); Modified: mplayerxp/libmpstream/s_lavc.cpp =================================================================== --- mplayerxp/libmpstream/s_lavc.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_lavc.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -25,6 +25,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: URLContext *ctx; off_t spos; @@ -84,6 +85,7 @@ Stream::type_e Lavs_Stream_Interface::type() const { return (ctx->is_streamed)?Stream::Type_Stream:Stream::Type_Seekable; } off_t Lavs_Stream_Interface::size() const { return end_pos; } off_t Lavs_Stream_Interface::sector_size() const { return STREAM_BUFFER_SIZE; } +std::string Lavs_Stream_Interface::mime_type() const { return "application/octet-stream"; } static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Lavs_Stream_Interface(libinput); } Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -35,6 +35,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: URL_t* url; off_t spos; @@ -75,6 +76,7 @@ Stream::type_e Network_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Network_Stream_Interface::size() const { return 0; } off_t Network_Stream_Interface::sector_size() const { return 1; } +std::string Network_Stream_Interface::mime_type() const { return networking->mime; } int Network_Stream_Interface::read(stream_packet_t*sp) { Modified: mplayerxp/libmpstream/s_null.cpp =================================================================== --- mplayerxp/libmpstream/s_null.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_null.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -22,6 +22,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; }; Null_Stream_Interface::Null_Stream_Interface(libinput_t*libinput):Stream_Interface(libinput) {} @@ -45,6 +46,7 @@ Stream::type_e Null_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Null_Stream_Interface::size() const { return 0; } off_t Null_Stream_Interface::sector_size() const { return 0; } +std::string Null_Stream_Interface::mime_type() const { return "application/octet-stream"; } static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Null_Stream_Interface(libinput); } Modified: mplayerxp/libmpstream/s_oss.cpp =================================================================== --- mplayerxp/libmpstream/s_oss.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_oss.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -42,6 +42,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: int fd; unsigned nchannels; /* 1,2,6 */ @@ -140,6 +141,7 @@ Stream::type_e Oss_Stream_Interface::type() const { return Stream::Type_Stream|Stream::Type_RawAudio; } off_t Oss_Stream_Interface::size() const { return -1; } off_t Oss_Stream_Interface::sector_size() const { return _sector_size; } +std::string Oss_Stream_Interface::mime_type() const { return "audio/PCMA"; } #ifndef TEMP_FAILURE_RETRY #define TEMP_FAILURE_RETRY(x) (x) Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -41,6 +41,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: MPXP_Rc start (); @@ -166,6 +167,7 @@ Stream::type_e Rtsp_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Rtsp_Stream_Interface::size() const { return 0; } off_t Rtsp_Stream_Interface::sector_size() const { return 1; } +std::string Rtsp_Stream_Interface::mime_type() const { return "application/octet-stream"; } static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Rtsp_Stream_Interface(libinput); } Modified: mplayerxp/libmpstream/s_tv.cpp =================================================================== --- mplayerxp/libmpstream/s_tv.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_tv.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -593,6 +593,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: void cmd_handler(unsigned cmd) const; tvi_handle_t* priv; @@ -663,6 +664,7 @@ Stream::type_e Tv_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Tv_Stream_Interface::size() const { return -1; } off_t Tv_Stream_Interface::sector_size() const { return 0; } +std::string Tv_Stream_Interface::mime_type() const { return "application/octet-stream"; } static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Tv_Stream_Interface(libinput); } Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -40,6 +40,7 @@ virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: MPXP_Rc start (); @@ -120,6 +121,7 @@ Stream::type_e Udp_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Udp_Stream_Interface::size() const { return 0; } off_t Udp_Stream_Interface::sector_size() const { return 1; } +std::string Udp_Stream_Interface::mime_type() const { return "application/octet-stream"; } static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Udp_Stream_Interface(libinput); } Modified: mplayerxp/libmpstream/s_vcdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -44,6 +44,7 @@ virtual off_t start_pos() const; virtual off_t size() const; virtual off_t sector_size() const; + virtual std::string mime_type() const; private: void inc_lsn(); @@ -162,6 +163,7 @@ off_t VcdNav_Stream_Interface::start_pos() const { return start*sizeof(vcdsector_t); } off_t VcdNav_Stream_Interface::size() const { return (start+total)*sizeof(vcdsector_t); } off_t VcdNav_Stream_Interface::sector_size() const { return sizeof(vcdsector_t); } +std::string VcdNav_Stream_Interface::mime_type() const { return "application/octet-stream"; } void VcdNav_Stream_Interface::inc_lsn() { Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/stream.cpp 2012-12-10 11:24:29 UTC (rev 529) @@ -115,6 +115,7 @@ off_t Stream::end_pos() const { return driver->size(); } unsigned Stream::sector_size() const { return driver->sector_size(); } float Stream::stream_pts() const { return driver->stream_pts(); } +std::string Stream::mime_type() const { return driver->mime_type(); } void Stream::type(Stream::type_e t) { _type=t; } int Stream::eof() const { return _eof; } void Stream::eof(int e) { if(!e) reset(); _eof = e; } @@ -275,5 +276,6 @@ int Memory_Stream::eof() const { return _pos>=_len; } void Memory_Stream::eof(int e) { e?_pos=_len+1:_pos=0; } void Memory_Stream::reset() { _pos=0; } +std::string Memory_Stream::mime_type() const { return "application/octet-stream"; } } //namespace mpxp Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/stream.h 2012-12-10 11:24:29 UTC (rev 529) @@ -4,6 +4,7 @@ #include "osdep/mplib.h" using namespace mpxp; +#include <string> #include <inttypes.h> #include <sys/types.h> #include <string.h> @@ -74,6 +75,7 @@ virtual off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ virtual unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ virtual float stream_pts() const; /**< PTS correction for idiotics DVD's discontinuities */ + virtual std::string mime_type() const; virtual int read_char(); virtual unsigned read_word(); @@ -120,6 +122,7 @@ virtual off_t start_pos() const; /**< real start of stream (without internet's headers) */ virtual off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ virtual unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ + virtual std::string mime_type() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ private: off_t _pos; unsigned _len; @@ -165,7 +168,6 @@ SCTRL_TXT_GET_STREAM_SOURCE_MEDIA,/**< Returns mediatype of stream. Accepts char *name as pointer on 256 bytes array */ SCTRL_TXT_GET_STREAM_RATING, /**< Returns rating of stream. Accepts char *name as pointer on 256 bytes array */ SCTRL_TXT_GET_STREAM_COMMENT, /**< Returns comments for stream. Accepts char *name as pointer on 256 bytes array */ - SCTRL_TXT_GET_STREAM_MIME, /**< Returns mimetype of stream. Accepts char *name as pointer on 256 bytes array */ /* These controls extracts videospecific info from stream */ SCTRL_VID_GET_PALETTE=1000, /**< Returns palette array. Accepts unsigned** as pointer to palette array */ SCTRL_VID_GET_WIDTH, /**< Returns width of raw video in pixels. Accepts unsigned* as pointer to storage area */ Modified: mplayerxp/libmpstream/stream_internal.h =================================================================== --- mplayerxp/libmpstream/stream_internal.h 2012-12-10 09:05:01 UTC (rev 528) +++ mplayerxp/libmpstream/stream_internal.h 2012-12-10 11:24:29 UTC (rev 529) @@ -3,6 +3,7 @@ #include "mp_config.h" #include "osdep/mplib.h" using namespace mpxp; +#include <string> namespace mpxp { struct libinput_t; @@ -60,6 +61,7 @@ /** Return size of sector of stream */ virtual off_t sector_size() const = 0; virtual float stream_pts() const { return 0; } + virtual std::string mime_type() const = 0; }; /** Stream-driver interface */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-10 09:05:16
|
Revision: 528 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=528&view=rev Author: nickols_k Date: 2012-12-10 09:05:01 +0000 (Mon, 10 Dec 2012) Log Message: ----------- split demux_audio on components Modified Paths: -------------- mplayerxp/libmpdemux/Makefile mplayerxp/libmpdemux/demuxer.cpp Added Paths: ----------- mplayerxp/libmpdemux/demux_ac3.cpp mplayerxp/libmpdemux/demux_dca.cpp mplayerxp/libmpdemux/demux_flac.cpp mplayerxp/libmpdemux/demux_mp3.cpp mplayerxp/libmpdemux/demux_musepack.cpp mplayerxp/libmpdemux/demux_snd_au.cpp mplayerxp/libmpdemux/demux_voc.cpp mplayerxp/libmpdemux/demux_wav.cpp Removed Paths: ------------- mplayerxp/libmpdemux/demux_audio.cpp Modified: mplayerxp/libmpdemux/Makefile =================================================================== --- mplayerxp/libmpdemux/Makefile 2012-12-09 13:46:25 UTC (rev 527) +++ mplayerxp/libmpdemux/Makefile 2012-12-10 09:05:01 UTC (rev 528) @@ -14,19 +14,23 @@ CXXSRCS += mp3_hdr.cpp stheader.cpp mpeg_hdr.cpp aviprint.cpp parse_mp4.cpp parse_es.cpp CXXSRCS += yuv4mpeg.cpp yuv4mpeg_ratio.cpp sub_cc.cpp sub_ty.cpp -CXXSRCS += demux_aiff.cpp \ +CXXSRCS += demux_ac3.cpp \ + demux_aiff.cpp \ demux_asf.cpp \ - demux_audio.cpp \ demux_avi.cpp \ demux_bmp.cpp \ + demux_dca.cpp \ demux_demuxers.cpp \ + demux_flac.cpp \ demux_film.cpp \ demux_fli.cpp \ demux_lavf.cpp \ demux_mkv.cpp \ demux_mov.cpp \ + demux_mp3.cpp \ demux_mpg.cpp \ demux_mpxp64.cpp \ + demux_musepack.cpp \ demux_nsv.cpp \ demux_null.cpp \ demux_nuv.cpp \ @@ -37,10 +41,13 @@ demux_realaud.cpp \ demux_roq.cpp \ demux_smjpeg.cpp \ + demux_snd_au.cpp \ demux_ts.cpp \ demux_ty.cpp \ demux_viv.cpp \ + demux_voc.cpp \ demux_vqf.cpp \ + demux_wav.cpp \ demux_y4m.cpp ifeq ($(HAVE_LIBVORBIS),yes) CXXSRCS += demux_ogg.cpp Added: mplayerxp/libmpdemux/demux_ac3.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ac3.cpp (rev 0) +++ mplayerxp/libmpdemux/demux_ac3.cpp 2012-12-10 09:05:01 UTC (rev 528) @@ -0,0 +1,417 @@ +#include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; +#include <algorithm> + +#include <stdlib.h> +#include <stdio.h> +#include <limits.h> +#include <string.h> +#ifdef MP_DEBUG +#include <assert.h> +#endif + +#include "libmpstream/stream.h" +#include "demuxer.h" +#include "demuxer_internal.h" +#include "stheader.h" +#include "libmpcodecs/dec_audio.h" +#include "libao2/afmt.h" +#include "aviprint.h" +#include "osdep/bswap.h" +#include "mp3_hdr.h" +#include "demux_msg.h" + +#define HDR_SIZE 4 + +struct ac3_priv_t : public Opaque { + public: + ac3_priv_t() {} + virtual ~ac3_priv_t() {} + + int frmt; + float last_pts,pts_per_packet,length; + uint32_t dword; + int pos; + /* Xing's VBR specific extensions */ + int is_xing; + unsigned nframes; + unsigned nbytes; + int scale; + unsigned srate; + int lsf; + unsigned char toc[100]; /* like AVI's indexes */ +}; + +#define AC3_CHANNEL 0 +#define AC3_MONO 1 +#define AC3_STEREO 2 +#define AC3_3F 3 +#define AC3_2F1R 4 +#define AC3_3F1R 5 +#define AC3_2F2R 6 +#define AC3_3F2R 7 +#define AC3_CHANNEL1 8 +#define AC3_CHANNEL2 9 +#define AC3_DOLBY 10 +#define AC3_CHANNEL_MASK 15 +#define AC3_LFE 16 +#define AC3_ADJUST_LEVEL 32 +static int ac3_decode_header (const uint8_t * buf,unsigned* sample_rate,unsigned* bit_rate,unsigned* channels) +{ + static int rate[] = { 32, 40, 48, 56, 64, 80, 96, 112, + 128, 160, 192, 224, 256, 320, 384, 448, + 512, 576, 640}; + static uint8_t lfeon[8] = {0x10, 0x10, 0x04, 0x04, 0x04, 0x01, 0x04, 0x01}; + static uint8_t halfrate[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3}; + int frmsizecod; + int bitrate; + int half; + int acmod; + int flags; + + if ((buf[0] != 0x0b) || (buf[1] != 0x77)) /* syncword */ + return 0; + + if (buf[5] >= 0x60) /* bsid >= 12 */ + return 0; + half = halfrate[buf[5] >> 3]; + + /* acmod, dsurmod and lfeon */ + acmod = buf[6] >> 5; + flags = ((((buf[6] & 0xf8) == 0x50) ? AC3_DOLBY : acmod) | + ((buf[6] & lfeon[acmod]) ? AC3_LFE : 0)); + + switch(flags & AC3_CHANNEL_MASK) + { + default: + case AC3_CHANNEL1: + case AC3_CHANNEL2: + case AC3_CHANNEL: + case AC3_MONO: + *channels=1; + break; + case AC3_STEREO: + *channels=2; + break; + case AC3_3F: + case AC3_2F1R: + *channels=3; + break; + case AC3_3F1R: + case AC3_2F2R: + *channels=4; + break; + case AC3_3F2R: + *channels=5; + break; + case AC3_DOLBY: + *channels=6; + break; + } + if((flags & AC3_LFE)==AC3_LFE) (*channels)++; + frmsizecod = buf[4] & 63; + if (frmsizecod >= 38) + return 0; + bitrate = rate [frmsizecod >> 1]; + *bit_rate = (bitrate * 1000) >> half; + + switch (buf[4] & 0xc0) { + case 0: + *sample_rate = 48000 >> half; + return 4 * bitrate; + case 0x40: + *sample_rate = 44100 >> half; + return 2 * (320 * bitrate / 147 + (frmsizecod & 1)); + case 0x80: + *sample_rate = 32000 >> half; + return 6 * bitrate; + default: + return 0; + } +} + +static int read_ac3_tags(Demuxer *demuxer,uint8_t *hdr, off_t pos,unsigned *bitrate,unsigned *samplerate,unsigned *channels) +{ + uint8_t b[8]; + unsigned n; + Stream *s=demuxer->stream; + demuxer->movi_end = s->end_pos(); + memcpy(b,hdr,4); + s->seek(pos+4); + s->read(&b[4],4); + for(n = 0; n < 5 ; n++) { + MSG_DBG2("read_ac3_tags\n"); + pos = ac3_decode_header(b,bitrate,samplerate,channels); + if(pos < 0) + return 0; + s->skip(pos-8); + if(s->eof()) + return 0; + s->read(b,8); + if(s->eof()) + return 0; + } + return 1; +} + +static int ac3_get_raw_id(Demuxer *demuxer,off_t fptr,unsigned *brate,unsigned *samplerate,unsigned *channels) +{ + uint32_t fcc,fcc1,fmt; + uint8_t *p,b[32]; + Stream *s; + *brate=*samplerate=*channels=0; + s = demuxer->stream; + s->seek(fptr); + fcc=fcc1=s->read_dword(); + fcc1=me2be_32(fcc1); + p = (uint8_t *)&fcc1; + s->seek(fptr); + s->read(b,sizeof(b)); + /* ac3 header check */ + if(ac3_decode_header(b,samplerate,brate,channels)>0) return 1; + s->seek(fptr); + return 0; +} + +static MPXP_Rc ac3_probe(Demuxer* demuxer) +{ + uint32_t fcc1,fcc2; + Stream *s; + uint8_t *p; + s = demuxer->stream; + fcc1=s->read_dword(); + fcc1=me2be_32(fcc1); + p = (uint8_t *)&fcc1; + if(ac3_get_raw_id(demuxer,0,&fcc1,&fcc2,&fcc2)) return MPXP_Ok; + return MPXP_False; +} + +static Opaque* ac3_open(Demuxer* demuxer) { + Stream *s; + sh_audio_t* sh_audio; + uint8_t hdr[HDR_SIZE]; + uint32_t fcc; + int frmt = 0, n = 0, pos = 0, step; + off_t st_pos = 0; + ac3_priv_t* priv; + const unsigned char *pfcc; +#ifdef MP_DEBUG + assert(demuxer != NULL); + assert(demuxer->stream != NULL); +#endif + + priv = new(zeromem) ac3_priv_t; + s = demuxer->stream; + s->reset(); + s->seek(s->start_pos()); + while(n < 5 && !s->eof()) + { + st_pos = s->tell(); + step = 1; + + if(pos < HDR_SIZE) { + s->read(&hdr[pos],HDR_SIZE-pos); + pos = HDR_SIZE; + } + + fcc = le2me_32(*(uint32_t *)hdr); + pfcc = (const unsigned char *)&fcc; + MSG_DBG2("AUDIO initial fcc=%c%c%c%c\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); + unsigned fmt; + uint8_t b[21]; + MSG_DBG2("initial mp3_header: 0x%08X at %lu\n",*(uint32_t *)hdr,st_pos); + memcpy(b,hdr,HDR_SIZE); + s->read(&b[HDR_SIZE],12-HDR_SIZE); + if((n = ac3_decode_header(b,&fmt,&fmt,&fmt)) > 0) { + demuxer->movi_start = st_pos; + break; + } + /* Add here some other audio format detection */ + if(step < HDR_SIZE) memmove(hdr,&hdr[step],HDR_SIZE-step); + pos -= step; + } + + if(!frmt) + { + MSG_ERR("Can't detect audio format\n"); + return NULL; + } + sh_audio = demuxer->new_sh_audio(); + MSG_DBG2("mp3_header off: st_pos=%lu n=%lu HDR_SIZE=%u\n",st_pos,n,HDR_SIZE); + demuxer->movi_start = s->tell(); + demuxer->movi_end = s->end_pos(); + sh_audio->wtag = 0x2000; + if(!read_ac3_tags(demuxer,hdr,pos,&sh_audio->i_bps,&sh_audio->rate,&sh_audio->nch)) return 0; + demuxer->movi_end = s->end_pos(); + s->seek(demuxer->movi_start); + + priv->frmt = frmt; + priv->last_pts = -1; + demuxer->priv = priv; + demuxer->audio->id = 0; + demuxer->audio->sh = sh_audio; + sh_audio->ds = demuxer->audio; + + MSG_V("demux_audio: audio data 0x%llX - 0x%llX \n",demuxer->movi_start,demuxer->movi_end); + if(s->tell() != demuxer->movi_start) + s->seek(demuxer->movi_start); + if(mp_conf.verbose && sh_audio->wf) print_wave_header(sh_audio->wf,sizeof(WAVEFORMATEX)); + 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 priv; +} + +static int ac3_demux(Demuxer *demuxer,Demuxer_Stream *ds) { + sh_audio_t* sh_audio; + Demuxer* demux; + ac3_priv_t* priv; + Stream* s; + int frmt,seof; +#ifdef MP_DEBUG + assert(ds != NULL); + assert(ds->sh != NULL); + assert(ds->demuxer != NULL); +#endif + sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); + demux = demuxer; + priv = static_cast<ac3_priv_t*>(demux->priv); + s = demux->stream; + + seof=s->eof(); + if(seof || (demux->movi_end && s->tell() >= demux->movi_end)) { + MSG_DBG2("ac3_demux: EOF due: %s\n", + seof?"s->eof()":"s->tell() >= demux->movi_end"); + if(!seof) { + MSG_DBG2("ac3_demux: stream_pos=%llu movi_end=%llu\n", + s->tell(), + demux->movi_end); + } + return 0; + } + frmt=priv->frmt; + while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { + uint8_t hdr[8]; + int len; + unsigned dummy; + s->read(hdr,8); + len = ac3_decode_header(hdr,&dummy,&dummy,&dummy); + MSG_DBG2("ac3_fillbuffer %u bytes\n",len); + if(s->eof()) return 0; /* workaround for dead-lock (skip(-7)) below */ + if(len < 0) { + s->skip(-7); + } else { + if(s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) + return 0; + if(len>8) + { + Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len); + memcpy(dp->buffer(),hdr,8); + dp->resize(len+8); + len=s->read(dp->buffer()+8,len-8); + priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; + dp->pts = priv->last_pts - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; + dp->flags=DP_NONKEYFRAME; + ds->add_packet(dp); + } + else s->skip(len); + return 1; + } + } + return 0; +} + +static void high_res_ac3_seek(Demuxer *demuxer,float _time) { + uint8_t hdr[8]; + int len,nf; + unsigned tmp; + ac3_priv_t* priv = static_cast<ac3_priv_t*>(demuxer->priv); + sh_audio_t* sh = (sh_audio_t*)demuxer->audio->sh; + + nf = _time*sh->rate/1152; + while(nf > 0) { + demuxer->stream->read(hdr,8); + MSG_DBG2("high_res_mp3_seek\n"); + len = ac3_decode_header(hdr,&tmp,&tmp,&tmp); + if(len < 0) { + demuxer->stream->skip(-7); + continue; + } + demuxer->stream->skip(len-8); + priv->last_pts += 1152/(float)sh->rate; + nf--; + } +} + +static void ac3_seek(Demuxer *demuxer,const seek_args_t* seeka){ + sh_audio_t* sh_audio; + Stream* s; + int base,pos; + float len; + ac3_priv_t* priv; + + if(!(sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh))) return; + s = demuxer->stream; + priv = static_cast<ac3_priv_t*>(demuxer->priv); + + base = seeka->flags&DEMUX_SEEK_SET ? demuxer->movi_start : s->tell(); + pos=base+(seeka->flags&DEMUX_SEEK_PERCENTS?(demuxer->movi_end - demuxer->movi_start):sh_audio->i_bps)*seeka->secs; + + if(demuxer->movi_end && pos >= demuxer->movi_end) { + sh_audio->timer = (s->tell() - demuxer->movi_start)/(float)sh_audio->i_bps; + return; + } else if(pos < demuxer->movi_start) + pos = demuxer->movi_start; + + priv->last_pts = (pos-demuxer->movi_start)/(float)sh_audio->i_bps; + sh_audio->timer = priv->last_pts - (demuxer->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; + + len = (seeka->flags & DEMUX_SEEK_SET) ? seeka->secs - priv->last_pts : seeka->secs; + if(len < 0) { + s->seek(demuxer->movi_start); + len = priv->last_pts + len; + priv->last_pts = 0; + } + if(len > 0) + high_res_ac3_seek(demuxer,len); + sh_audio->timer = priv->last_pts - (demuxer->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; + return; +} + +static void ac3_close(Demuxer* demuxer) { + ac3_priv_t* priv = static_cast<ac3_priv_t*>(demuxer->priv); + + if(!priv) return; + delete priv; +} + +static MPXP_Rc ac3_control(const Demuxer *demuxer,int cmd,any_t*args) +{ + UNUSED(demuxer); + UNUSED(cmd); + UNUSED(args); + return MPXP_Unknown; +} + +/****************** Options stuff ******************/ + +#include "libmpconf/cfgparser.h" + +static const config_t ac3_opts[] = { + {NULL, NULL, 0, 0, 0, 0, NULL} +}; + +extern const demuxer_driver_t demux_ac3 = +{ + "ac3", + "AC3 parser", + ".ac3", + ac3_opts, + ac3_probe, + ac3_open, + ac3_demux, + ac3_seek, + ac3_close, + ac3_control +}; Property changes on: mplayerxp/libmpdemux/demux_ac3.cpp ___________________________________________________________________ Added: svn:eol-style + native Deleted: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-12-09 13:46:25 UTC (rev 527) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-12-10 09:05:01 UTC (rev 528) @@ -1,1809 +0,0 @@ -#include "mp_config.h" -#include "osdep/mplib.h" -using namespace mpxp; -#include <algorithm> - -#include <stdlib.h> -#include <stdio.h> -#include <limits.h> -#include <string.h> -#ifdef MP_DEBUG -#include <assert.h> -#endif - -#include "libmpstream/stream.h" -#include "demuxer.h" -#include "demuxer_internal.h" -#include "stheader.h" -#include "genres.h" -#include "libmpcodecs/dec_audio.h" -#include "libao2/afmt.h" -#include "aviprint.h" -#include "osdep/bswap.h" -#include "mp3_hdr.h" -#include "demux_msg.h" - -#define RAW_MP1 1 -#define RAW_MP2 2 -#define RAW_MP3 3 -#define RAW_WAV 4 -#define RAW_FLAC 5 -#define RAW_SND_AU 6 -#define RAW_AC3 7 -#define RAW_DCA 8 -#define RAW_VOC 9 -#define RAW_MUSEPACK 10 - -#define HDR_SIZE 4 - -struct da_priv_t : public Opaque { - public: - da_priv_t() {} - virtual ~da_priv_t() {} - - int frmt; - float last_pts,pts_per_packet,length; - uint32_t dword; - int pos; - /* Xing's VBR specific extensions */ - int is_xing; - unsigned nframes; - unsigned nbytes; - int scale; - unsigned srate; - int lsf; - unsigned char toc[100]; /* like AVI's indexes */ -}; - -static int hr_mp3_seek = 0; - -#define DDCA_MONO 0 -#define DDCA_CHANNEL 1 -#define DDCA_STEREO 2 -#define DDCA_STEREO_SUMDIFF 3 -#define DDCA_STEREO_TOTAL 4 -#define DDCA_3F 5 -#define DDCA_2F1R 6 -#define DDCA_3F1R 7 -#define DDCA_2F2R 8 -#define DDCA_3F2R 9 -#define DDCA_4F2R 10 - -#define DDCA_DOLBY 101 /* FIXME */ - -#define DDCA_CHANNEL_MAX DDCA_3F2R /* We don't handle anything above that */ -#define DDCA_CHANNEL_BITS 6 -#define DDCA_CHANNEL_MASK 0x3F - -#define DDCA_LFE 0x80 -#define DDCA_ADJUST_LEVEL 0x100 - -typedef struct ddca_state_s -{ - const uint32_t *buffer_start; - uint32_t bits_left,current_word; - int word_mode,bigendian_mode; -}ddca_state_t; - -#ifdef WORDS_BIGENDIAN -# define ddca_swab32(x) (x) -#else -# define ddca_swab32(x)\ -((((uint8_t*)&x)[0] << 24) | (((uint8_t*)&x)[1] << 16) | \ - (((uint8_t*)&x)[2] << 8) | (((uint8_t*)&x)[3])) -#endif - -#ifdef WORDS_BIGENDIAN -# define ddca_swable32(x)\ -((((uint8_t*)&x)[0] << 16) | (((uint8_t*)&x)[1] << 24) | \ - (((uint8_t*)&x)[2]) | (((uint8_t*)&x)[3] << 8)) -#else -# define ddca_swable32(x)\ -((((uint16_t*)&x)[0] << 16) | (((uint16_t*)&x)[1])) -#endif - -static uint32_t ddca_bitstream_get_bh (ddca_state_t * state, uint32_t num_bits); - -static uint32_t ddca_bitstream_get (ddca_state_t * state, uint32_t num_bits) -{ - uint32_t result; - - if (num_bits < state->bits_left) { - result = (state->current_word << (32 - state->bits_left)) - >> (32 - num_bits); - - state->bits_left -= num_bits; - return result; - } - - return ddca_bitstream_get_bh (state, num_bits); -} - -static void ddca_bitstream_init (ddca_state_t * state,const uint8_t * buf, int word_mode, - int bigendian_mode) -{ - intptr_t align; - - align = (uintptr_t)buf & 3; - state->buffer_start = (uint32_t *) (buf - align); - state->bits_left = 0; - state->current_word = 0; - state->word_mode = word_mode; - state->bigendian_mode = bigendian_mode; - ddca_bitstream_get (state, align * 8); -} - -static void ddca_bitstream_fill_current (ddca_state_t * state) -{ - uint32_t tmp; - - tmp = *(state->buffer_start++); - - if (state->bigendian_mode) - state->current_word = ddca_swab32 (tmp); - else - state->current_word = ddca_swable32 (tmp); - - if (!state->word_mode) - { - state->current_word = (state->current_word & 0x00003FFF) | - ((state->current_word & 0x3FFF0000 ) >> 2); - } -} - -static uint32_t ddca_bitstream_get_bh (ddca_state_t * state, uint32_t num_bits) -{ - uint32_t result; - - num_bits -= state->bits_left; - - result = ((state->current_word << (32 - state->bits_left)) >> - (32 - state->bits_left)); - - if ( !state->word_mode && num_bits > 28 ) { - ddca_bitstream_fill_current (state); - result = (result << 28) | state->current_word; - num_bits -= 28; - } - - ddca_bitstream_fill_current (state); - - if ( state->word_mode ) - { - if (num_bits != 0) - result = (result << num_bits) | - (state->current_word >> (32 - num_bits)); - - state->bits_left = 32 - num_bits; - } - else - { - if (num_bits != 0) - result = (result << num_bits) | - (state->current_word >> (28 - num_bits)); - - state->bits_left = 28 - num_bits; - } - - return result; -} - -static int ddca_syncinfo (ddca_state_t * state, unsigned * flags, - unsigned * sample_rate, unsigned * bit_rate, unsigned * frame_length) -{ -static const int ddca_sample_rates[] = -{ - 0, 8000, 16000, 32000, 0, 0, 11025, 22050, 44100, 0, 0, - 12000, 24000, 48000, 96000, 192000 -}; - -static const int ddca_bit_rates[] = -{ - 32000, 56000, 64000, 96000, 112000, 128000, - 192000, 224000, 256000, 320000, 384000, - 448000, 512000, 576000, 640000, 768000, - 896000, 1024000, 1152000, 1280000, 1344000, - 1408000, 1411200, 1472000, 1536000, 1920000, - 2048000, 3072000, 3840000, 1/*open*/, 2/*variable*/, 3/*lossless*/ -}; - -#if 0 -static const uint8_t ddca_channels[] = -{ - 1, 2, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 6, 7, 8, 8 -}; - -static const uint8_t ddca_bits_per_sample[] = -{ - 16, 16, 20, 20, 0, 24, 24 -}; -#endif - int frame_size; - - /* Sync code */ - ddca_bitstream_get (state, 32); - /* Frame type */ - ddca_bitstream_get (state, 1); - /* Samples deficit */ - ddca_bitstream_get (state, 5); - /* CRC present */ - ddca_bitstream_get (state, 1); - - *frame_length = (ddca_bitstream_get (state, 7) + 1) * 32; - frame_size = ddca_bitstream_get (state, 14) + 1; - if (!state->word_mode) frame_size = frame_size * 8 / 14 * 2; - - /* Audio channel arrangement */ - *flags = ddca_bitstream_get (state, 6); - if (*flags > 63) return 0; - - *sample_rate = ddca_bitstream_get (state, 4); - if (*sample_rate >= sizeof (ddca_sample_rates) / sizeof (int)) return 0; - *sample_rate = ddca_sample_rates[ *sample_rate ]; - if (!*sample_rate) return 0; - - *bit_rate = ddca_bitstream_get (state, 5); - if (*bit_rate >= sizeof (ddca_bit_rates) / sizeof (int)) return 0; - *bit_rate = ddca_bit_rates[ *bit_rate ]; - if (!*bit_rate) return 0; - - /* LFE */ - ddca_bitstream_get (state, 10); - if (ddca_bitstream_get (state, 2)) *flags |= DDCA_LFE; - - return frame_size; -} - -static int ddca_decode_header (const uint8_t * buf, unsigned* sample_rate, unsigned* bit_rate,unsigned*channels) -{ - ddca_state_t state; - unsigned flags,frame_length,frame_size=0; - /* 14 bits and little endian bitstream */ - if (buf[0] == 0xff && buf[1] == 0x1f && - buf[2] == 0x00 && buf[3] == 0xe8 && - (buf[4] & 0xf0) == 0xf0 && buf[5] == 0x07) - { - MSG_DBG2("DCA: 14 bits and little endian bitstream\n"); - ddca_bitstream_init (&state, buf, 0, 0); - frame_size = ddca_syncinfo (&state, &flags, sample_rate, - bit_rate, &frame_length); - } - else - /* 14 bits and big endian bitstream */ - if (buf[0] == 0x1f && buf[1] == 0xff && - buf[2] == 0xe8 && buf[3] == 0x00 && - buf[4] == 0x07 && (buf[5] & 0xf0) == 0xf0) - { - MSG_DBG2("DCA: 14 bits and big endian bitstream\n"); - ddca_bitstream_init (&state, buf, 0, 1); - frame_size = ddca_syncinfo (&state, &flags, sample_rate, - bit_rate, &frame_length); - } - else - /* 16 bits and little endian bitstream */ - if (buf[0] == 0xfe && buf[1] == 0x7f && - buf[2] == 0x01 && buf[3] == 0x80) - { - MSG_DBG2("DCA: 16 bits and little endian bitstream\n"); - ddca_bitstream_init (&state, buf, 1, 0); - frame_size = ddca_syncinfo (&state, &flags, sample_rate, - bit_rate, &frame_length); - } - else - /* 16 bits and big endian bitstream */ - if (buf[0] == 0x7f && buf[1] == 0xfe && - buf[2] == 0x80 && buf[3] == 0x01) - { - MSG_DBG2("DCA: 16 bits and big endian bitstream\n"); - ddca_bitstream_init (&state, buf, 1, 1); - frame_size = ddca_syncinfo (&state, &flags, sample_rate, - bit_rate, &frame_length); - } - *channels=0; - if(frame_size) - { - switch(flags&DDCA_CHANNEL_MASK) - { - case DDCA_MONO: *channels=1; break; - case DDCA_CHANNEL: - case DDCA_STEREO: - case DDCA_STEREO_SUMDIFF: - case DDCA_STEREO_TOTAL: *channels=2; break; - case DDCA_3F: - case DDCA_2F1R: *channels=3; break; - case DDCA_3F1R: - case DDCA_2F2R: *channels=4; break; - case DDCA_3F2R: *channels=5; break; - case DDCA_4F2R: *channels=6; break; - default: break; - } -// if(flags&DDCA_DOLBY) (*channels)++; - if(flags&DDCA_LFE) (*channels)++; - } - return frame_size; -} - -#define AC3_CHANNEL 0 -#define AC3_MONO 1 -#define AC3_STEREO 2 -#define AC3_3F 3 -#define AC3_2F1R 4 -#define AC3_3F1R 5 -#define AC3_2F2R 6 -#define AC3_3F2R 7 -#define AC3_CHANNEL1 8 -#define AC3_CHANNEL2 9 -#define AC3_DOLBY 10 -#define AC3_CHANNEL_MASK 15 -#define AC3_LFE 16 -#define AC3_ADJUST_LEVEL 32 -static int ac3_decode_header (const uint8_t * buf,unsigned* sample_rate,unsigned* bit_rate,unsigned* channels) -{ - static int rate[] = { 32, 40, 48, 56, 64, 80, 96, 112, - 128, 160, 192, 224, 256, 320, 384, 448, - 512, 576, 640}; - static uint8_t lfeon[8] = {0x10, 0x10, 0x04, 0x04, 0x04, 0x01, 0x04, 0x01}; - static uint8_t halfrate[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3}; - int frmsizecod; - int bitrate; - int half; - int acmod; - int flags; - - if ((buf[0] != 0x0b) || (buf[1] != 0x77)) /* syncword */ - return 0; - - if (buf[5] >= 0x60) /* bsid >= 12 */ - return 0; - half = halfrate[buf[5] >> 3]; - - /* acmod, dsurmod and lfeon */ - acmod = buf[6] >> 5; - flags = ((((buf[6] & 0xf8) == 0x50) ? AC3_DOLBY : acmod) | - ((buf[6] & lfeon[acmod]) ? AC3_LFE : 0)); - - switch(flags & AC3_CHANNEL_MASK) - { - default: - case AC3_CHANNEL1: - case AC3_CHANNEL2: - case AC3_CHANNEL: - case AC3_MONO: - *channels=1; - break; - case AC3_STEREO: - *channels=2; - break; - case AC3_3F: - case AC3_2F1R: - *channels=3; - break; - case AC3_3F1R: - case AC3_2F2R: - *channels=4; - break; - case AC3_3F2R: - *channels=5; - break; - case AC3_DOLBY: - *channels=6; - break; - } - if((flags & AC3_LFE)==AC3_LFE) (*channels)++; - frmsizecod = buf[4] & 63; - if (frmsizecod >= 38) - return 0; - bitrate = rate [frmsizecod >> 1]; - *bit_rate = (bitrate * 1000) >> half; - - switch (buf[4] & 0xc0) { - case 0: - *sample_rate = 48000 >> half; - return 4 * bitrate; - case 0x40: - *sample_rate = 44100 >> half; - return 2 * (320 * bitrate / 147 + (frmsizecod & 1)); - case 0x80: - *sample_rate = 32000 >> half; - return 6 * bitrate; - default: - return 0; - } -} - -static void find_next_mp3_hdr(Demuxer *demuxer,uint8_t *hdr) { - int len; - off_t spos; - while(!demuxer->stream->eof()) { - spos=demuxer->stream->tell(); - demuxer->stream->read(hdr,4); - len = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); - if(len < 0) { - demuxer->stream->skip(-3); - continue; - } - demuxer->stream->seek(spos); - break; - } -} - - -static int read_mp3v1_tags(Demuxer *demuxer,uint8_t *hdr, off_t pos ) -{ - unsigned n; - Stream *s=demuxer->stream; - for(n = 0; n < 5 ; n++) { - MSG_DBG2("read_mp3v1_tags\n"); - pos = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); - if(pos < 0) - return 0; - s->skip(pos-4); - if(s->eof()) - return 0; - s->read(hdr,4); - if(s->eof()) - return 0; - } - if(s->end_pos()) { - char tag[4]; - s->seek(s->end_pos()-128); - s->read(tag,3); - tag[3] = '\0'; - if(strcmp(tag,"TAG")) - demuxer->movi_end = s->end_pos(); - else { - char buf[31]; - uint8_t g; - demuxer->movi_end = s->tell()-3; - s->read(buf,30); - buf[30] = '\0'; - demuxer->info().add(INFOT_NAME,buf); - s->read(buf,30); - buf[30] = '\0'; - demuxer->info().add(INFOT_AUTHOR,buf); - s->read(buf,30); - buf[30] = '\0'; - demuxer->info().add(INFOT_ALBUM,buf); - s->read(buf,4); - buf[4] = '\0'; - demuxer->info().add(INFOT_DATE,buf); - s->read(buf,30); - buf[30] = '\0'; - demuxer->info().add(INFOT_COMMENTS,buf); - if(buf[28] == 0 && buf[29] != 0) { - uint8_t trk = (uint8_t)buf[29]; - sprintf(buf,"%d",trk); - demuxer->info().add(INFOT_TRACK,buf); - } - g = s->read_char(); - demuxer->info().add(INFOT_GENRE,genres[g]); - } - } - return 1; -} - -static int read_ac3_tags(Demuxer *demuxer,uint8_t *hdr, off_t pos,unsigned *bitrate,unsigned *samplerate,unsigned *channels) -{ - uint8_t b[8]; - unsigned n; - Stream *s=demuxer->stream; - demuxer->movi_end = s->end_pos(); - memcpy(b,hdr,4); - s->seek(pos+4); - s->read(&b[4],4); - for(n = 0; n < 5 ; n++) { - MSG_DBG2("read_ac3_tags\n"); - pos = ac3_decode_header(b,bitrate,samplerate,channels); - if(pos < 0) - return 0; - s->skip(pos-8); - if(s->eof()) - return 0; - s->read(b,8); - if(s->eof()) - return 0; - } - return 1; -} - -static int read_ddca_tags(Demuxer *demuxer,uint8_t *hdr, off_t pos,unsigned *bitrate,unsigned *samplerate,unsigned *channels) -{ - uint8_t b[12]; - unsigned n; - Stream *s=demuxer->stream; - demuxer->movi_end = s->end_pos(); - memcpy(b,hdr,4); - s->seek(pos+4); - s->read(&b[4],8); - for(n = 0; n < 5 ; n++) { - MSG_DBG2("read_ddca_tags\n"); - pos = ddca_decode_header(b,bitrate,samplerate,channels); - if(pos < 0) - return 0; - s->skip(pos-12); - if(s->eof()) - return 0; - s->read(hdr,12); - if(s->eof()) - return 0; - } - return 1; -} -/* id3v2 */ -#define FOURCC_TAG BE_FOURCC -#define ID3V22_TAG FOURCC_TAG('I', 'D', '3', 2) /* id3 v2.2 tags */ -#define ID3V23_TAG FOURCC_TAG('I', 'D', '3', 3) /* id3 v2.3 tags */ -#define ID3V24_TAG FOURCC_TAG('I', 'D', '3', 4) /* id3 v2.4 tags */ - -/* - * ID3 v2.2 - */ -/* tag header */ -#define ID3V22_UNSYNCH_FLAG 0x80 -#define ID3V22_COMPRESS_FLAG 0x40 -#define ID3V22_ZERO_FLAG 0x3F - -/* frame header */ -#define ID3V22_FRAME_HEADER_SIZE 6 -static int read_id3v22_tags(Demuxer *demuxer,unsigned flags,unsigned hsize) -{ - off_t pos,epos; - Stream *s=demuxer->stream; - if( flags==ID3V22_ZERO_FLAG || - flags==ID3V22_UNSYNCH_FLAG || - flags==ID3V22_COMPRESS_FLAG) return 0; - pos=s->tell(); - epos=pos+hsize; - while(pos<epos) - { - uint32_t id; - unsigned len; - unsigned char buf[ID3V22_FRAME_HEADER_SIZE]; - char data[4096]; - s->read(buf,ID3V22_FRAME_HEADER_SIZE); - id=(buf[2] << 16) + (buf[1] << 8) + buf[0]; - len=(buf[3] << 14) + (buf[4] << 7) + buf[5]; - s->read(data,std::min(len,unsigned(4096))); - data[std::min(len,unsigned(4096))]=0; - switch(id) - { - 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; - } - pos=s->tell(); - } - end: - return 1; -} - -/* - * ID3 v2.3 - */ -/* tag header */ -#define ID3V23_UNSYNCH_FLAG 0x80 -#define ID3V23_EXT_HEADER_FLAG 0x40 -#define ID3V23_EXPERIMENTAL_FLAG 0x20 -#define ID3V23_ZERO_FLAG 0x1F - -/* frame header */ -#define ID3V23_FRAME_HEADER_SIZE 10 -#define ID3V23_FRAME_TAG_PRESERV_FLAG 0x8000 -#define ID3V23_FRAME_FILE_PRESERV_FLAG 0x4000 -#define ID3V23_FRAME_READ_ONLY_FLAG 0x2000 -#define ID3V23_FRAME_COMPRESS_FLAG 0x0080 -#define ID3V23_FRAME_ENCRYPT_FLAG 0x0040 -#define ID3V23_FRAME_GROUP_ID_FLAG 0x0020 -#define ID3V23_FRAME_ZERO_FLAG 0x1F1F - -static int read_id3v23_tags(Demuxer *demuxer,unsigned flags,unsigned hsize) -{ - off_t pos,epos; - Stream *s=demuxer->stream; - if( flags==ID3V23_ZERO_FLAG || - flags==ID3V23_UNSYNCH_FLAG) return 0; - if( flags==ID3V23_EXT_HEADER_FLAG ) - { - char buf[4]; - unsigned ehsize; - demuxer->stream->read(buf,4); - ehsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3]; - demuxer->stream->skip(ehsize); - } - pos=s->tell(); - epos=pos+hsize; - while(pos<epos) - { - uint32_t id; - unsigned len; - unsigned char buf[ID3V23_FRAME_HEADER_SIZE]; - char data[4096]; - s->read(buf,ID3V23_FRAME_HEADER_SIZE); - id=*((uint32_t *)buf); - len=(buf[4] << 21) + (buf[5] << 14) + (buf[6] << 7) + buf[7]; - s->read(data,std::min(len,unsigned(4096))); - data[std::min(len,unsigned(4096))]=0; - MSG_V("ID3: %4s len %u\n",buf,len); - switch(id) - { - 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; - } - pos=s->tell(); - } - end: - return 1; -} - -/* - * ID3 v2.4 - */ -/* tag header */ -#define ID3V24_UNSYNCH_FLAG 0x80 -#define ID3V24_EXT_HEADER_FLAG 0x40 -#define ID3V24_EXPERIMENTAL_FLAG 0x20 -#define ID3V24_FOOTER_FLAG 0x10 -#define ID3V24_ZERO_FLAG 0x0F - -/* frame header */ -#define ID3V24_FRAME_HEADER_SIZE 10 -#define ID3V24_FRAME_TAG_PRESERV_FLAG 0x4000 -#define ID3V24_FRAME_FILE_PRESERV_FLAG 0x2000 -#define ID3V24_FRAME_READ_ONLY_FLAG 0x1000 -#define ID3V24_FRAME_GROUP_ID_FLAG 0x0040 -#define ID3V24_FRAME_COMPRESS_FLAG 0x0008 -#define ID3V24_FRAME_ENCRYPT_FLAG 0x0004 -#define ID3V24_FRAME_UNSYNCH_FLAG 0x0002 -#define ID3V24_FRAME_DATA_LEN_FLAG 0x0001 -#define ID3V24_FRAME_ZERO_FLAG 0x8FB0 - -static int read_id3v24_tags(Demuxer *demuxer,unsigned flags,unsigned hsize) -{ - off_t pos,epos; - Stream *s=demuxer->stream; - if( flags==ID3V24_ZERO_FLAG || - flags==ID3V24_UNSYNCH_FLAG) return 0; - if( flags==ID3V24_EXT_HEADER_FLAG ) - { - char buf[4]; - unsigned ehsize; - demuxer->stream->read(buf,4); - ehsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3]; - demuxer->stream->skip(ehsize); - } - pos=s->tell(); - epos=pos+hsize; - while(pos<epos) - { - uint32_t id; - unsigned len; - unsigned char buf[ID3V23_FRAME_HEADER_SIZE]; - char data[4096]; - s->read(buf,ID3V23_FRAME_HEADER_SIZE); - id=*((uint32_t *)buf); - len=(buf[4] << 21) + (buf[5] << 14) + (buf[6] << 7) + buf[7]; - s->read(data,std::min(len,unsigned(4096))); - data[std::min(len,unsigned(4096))]=0; - MSG_V("ID3: %4s len %u\n",buf,len); - 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) 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; - } - pos=s->tell(); - } - end: - return 1; -} - -static int read_id3v2_tags(Demuxer *demuxer) -{ - char buf[4]; - Stream* s=demuxer->stream; - unsigned vers,rev,flags,hsize; - s->seek(3); /* skip 'ID3' */ - vers=s->read_char(); - rev=s->read_char(); - flags=s->read_char(); - s->read(buf,4); - hsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3]; - MSG_V("Found ID3v2.%d.%d flags %d size %d\n",vers,rev,flags,hsize); - if(vers==2) return read_id3v22_tags(demuxer,flags,hsize); - else - if(vers==3) return read_id3v23_tags(demuxer,flags,hsize); - else - if(vers==4) return read_id3v24_tags(demuxer,flags,hsize); - else - return 1; -} - -static int audio_get_raw_id(Demuxer *demuxer,off_t fptr,unsigned *brate,unsigned *samplerate,unsigned *channels) -{ - int retval=0; - uint32_t fcc,fcc1,fmt; - uint8_t *p,b[32]; - Stream *s; - *brate=*samplerate=*channels=0; - s = demuxer->stream; - s->seek(fptr); - fcc=fcc1=s->read_dword(); - fcc1=me2be_32(fcc1); - p = (uint8_t *)&fcc1; - s->seek(fptr); - s->read(b,sizeof(b)); - if(p[0] == 'M' && p[1] == 'P' && p[2] == '+' && (p[3] >= 4 && p[3] <= 0x20)) retval = RAW_MUSEPACK; - else - if(fcc1 == mmioFOURCC('f','L','a','C')) retval = RAW_FLAC; - else - if(fcc1 == mmioFOURCC('.','s','n','d')) retval = RAW_SND_AU; - else - if(mp_check_mp3_header(fcc1,&fmt,brate,samplerate,channels)) - { - if(fmt==1) retval = RAW_MP1; - else - if(fmt==2) retval = RAW_MP2; - else retval = RAW_MP3; - } - else - /* ac3 header check */ - if(ac3_decode_header(b,samplerate,brate,channels)>0) retval = RAW_AC3; - else - if(ddca_decode_header(b,samplerate,brate,channels)>0) retval = RAW_DCA; - else - if(memcmp(b,"Creative Voice File\x1A",20)==0) retval = RAW_VOC; - s->seek(fptr); - return retval; -} - -static MPXP_Rc audio_probe(Demuxer* demuxer) -{ - uint32_t fcc1,fcc2; - Stream *s; - uint8_t *p; - s = demuxer->stream; - fcc1=s->read_dword(); - fcc1=me2be_32(fcc1); - p = (uint8_t *)&fcc1; - if(fcc1 == mmioFOURCC('R','I','F','F')) - { - s->skip(4); - fcc2 = s->read_fourcc(); - if(fcc2 == mmioFOURCC('W','A','V','E')) return MPXP_Ok; - } - else - if(p[0] == 'I' && p[1] == 'D' && p[2] == '3' && (p[3] >= 2)) return MPXP_Ok; - else - if(audio_get_raw_id(demuxer,0,&fcc1,&fcc2,&fcc2)) return MPXP_Ok; - return MPXP_False; -} - -#define FRAMES_FLAG 0x0001 -#define BYTES_FLAG 0x0002 -#define TOC_FLAG 0x0004 -#define VBR_SCALE_FLAG 0x0008 -#define FRAMES_AND_BYTES (FRAMES_FLAG | BYTES_FLAG) -#define MPG_MD_MONO 3 - -static void Xing_test(Stream *s,uint8_t *hdr,da_priv_t *priv) -{ - off_t fpos; - unsigned mpeg1, mode, sr_index; - unsigned off,head_flags; - char buf[4]; - const int sr_table[4] = { 44100, 48000, 32000, 99999 }; - priv->scale=-1; - mpeg1 = (hdr[1]>>3)&1; - sr_index = (hdr[2]>>2)&3; - mode = (hdr[3]>>6)&3; - if(mpeg1) off=mode!=MPG_MD_MONO?32:17; - else off=mode!=MPG_MD_MONO?17:9;/* mpeg2 */ - fpos = s->tell(); - s->skip(off); - s->read(buf,4); - if(memcmp(buf,"Xing",4) == 0 || memcmp(buf,"Info",4) == 0) - { - priv->is_xing=1; - priv->lsf=mpeg1?0:1; - priv->srate=sr_table[sr_index&0x3]; - head_flags = s->read_dword(); - if(head_flags & FRAMES_FLAG) priv->nframes=s->read_dword(); - if(head_flags & BYTES_FLAG) priv->nbytes=s->read_dword(); - if(head_flags & TOC_FLAG) s->read(priv->toc,100); - if(head_flags & VBR_SCALE_FLAG) priv->scale = s->read_dword(); - MSG_DBG2("Found Xing VBR header: flags=%08X nframes=%u nbytes=%u scale=%i srate=%u\n" - ,head_flags,priv->nframes,priv->nbytes,priv->scale,priv->srate); - s->seek(fpos); - } - else s->seek(fpos); -} - -extern const demuxer_driver_t demux_audio; - -static Opaque* audio_open(Demuxer* demuxer) { - Stream *s; - sh_audio_t* sh_audio; - uint8_t hdr[HDR_SIZE]; - uint32_t fcc,fcc2; - int frmt = 0, n = 0, pos = 0, step; - unsigned mp3_brate,mp3_samplerate,mp3_channels; - off_t st_pos = 0; - da_priv_t* priv; - const unsigned char *pfcc; -#ifdef MP_DEBUG - assert(demuxer != NULL); - assert(demuxer->stream != NULL); -#endif - - priv = new(zeromem) da_priv_t; - s = demuxer->stream; - s->reset(); - s->seek(s->start_pos()); - while(n < 5 && !s->eof()) - { - st_pos = s->tell(); - step = 1; - - if(pos < HDR_SIZE) { - s->read(&hdr[pos],HDR_SIZE-pos); - pos = HDR_SIZE; - } - - fcc = le2me_32(*(uint32_t *)hdr); - pfcc = (const unsigned char *)&fcc; - MSG_DBG2("AUDIO initial fcc=%c%c%c%c\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); - if(fcc == mmioFOURCC('R','I','F','F')) - { - MSG_DBG2("Found RIFF\n"); - s->skip(4); - if(s->eof()) break; - s->read(hdr,4); - if(s->eof()) break; - fcc2 = le2me_32(*(uint32_t *)hdr); - pfcc= (const unsigned char *)&fcc2; - MSG_DBG2("RIFF fcc=%c%c%c%c\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); - if(fcc2!=mmioFOURCC('W','A','V','E')) s->skip(-8); - else - { - /* We found wav header. Now we should find 'fmt '*/ - off_t fpos; - fpos=s->tell(); - MSG_DBG2("RIFF WAVE found. Start detection from %llu\n",fpos); - step = 4; - while(1) - { - unsigned chunk_len; - fcc=s->read_fourcc(); - pfcc= (const unsigned char *)&fcc; - MSG_DBG2("fmt fcc=%c%c%c%c\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); - if(fcc==mmioFOURCC('f','m','t',' ')) - { - MSG_DBG2("RIFF WAVE fmt found\n"); - frmt = RAW_WAV; - break; - } - if(s->eof()) break; - chunk_len=s->read_dword_le(); - s->skip(chunk_len); - } - MSG_DBG2("Restore stream pos %llu\n",fpos); - s->seek(fpos); - if(frmt==RAW_WAV) break; - } - } - else - if( hdr[0] == 'I' && hdr[1] == 'D' && hdr[2] == '3' && (hdr[3] >= 2)) - { - unsigned len,fmt; - s->skip(2); - s->read(hdr,4); - len = (hdr[0]<<21) | (hdr[1]<<14) | (hdr[2]<<7) | hdr[3]; - read_id3v2_tags(demuxer); - s->seek(len+10); - find_next_mp3_hdr(demuxer,hdr); - Xing_test(s,hdr,priv); - mp_decode_mp3_header(hdr,&fmt,&mp3_brate,&mp3_samplerate,&mp3_channels); - step = 4; - frmt=RAW_MP3; - } - else - if( hdr[0] == 'f' && hdr[1] == 'L' && hdr[2] == 'a' && hdr[3] == 'C' ) - { - frmt=RAW_FLAC; - break; - } - else - if( hdr[0] == '.' && hdr[1] == 's' && hdr[2] == 'n' && hdr[3] == 'd' ) - { - frmt=RAW_SND_AU; - break; - } - else - if( hdr[0] == 'M' && hdr[1] == 'P' && hdr[2] == '+' && (hdr[3] >= 4 && hdr[3] <= 0x20)) - { - frmt=RAW_MUSEPACK; - break; - } - else - { - unsigned fmt; - uint8_t b[21]; - MSG_DBG2("initial mp3_header: 0x%08X at %lu\n",*(uint32_t *)hdr,st_pos); - if((n = mp_decode_mp3_header(hdr,&fmt,&mp3_brate,&mp3_samplerate,&mp3_channels)) > 0) - { - /* A Xing header may be present in stream as the first frame of an mp3 bitstream */ - Xing_test(s,hdr,priv); - demuxer->movi_start = st_pos; - frmt = fmt; - break; - } - memcpy(b,hdr,HDR_SIZE); - s->read(&b[HDR_SIZE],12-HDR_SIZE); - if((n = ac3_decode_header(b,&fmt,&fmt,&fmt)) > 0) - { - demuxer->movi_start = st_pos; - frmt = RAW_AC3; - break; - } - if((n = ddca_decode_header(b,&fmt,&fmt,&fmt)) > 0) - { - demuxer->movi_start = st_pos; - frmt = RAW_DCA; - break; - } - if(memcmp(b,"Creative Voice File\x1A",20)==0) - { - frmt = RAW_VOC; - break; - } - } - /* Add here some other audio format detection */ - if(step < HDR_SIZE) memmove(hdr,&hdr[step],HDR_SIZE-step); - pos -= step; - } - - if(!frmt) - { - MSG_ERR("Can't detect audio format\n"); - return NULL; - } - sh_audio = demuxer->new_sh_audio(); - MSG_DBG2("mp3_header off: st_pos=%lu n=%lu HDR_SIZE=%u\n",st_pos,n,HDR_SIZE); - demuxer->movi_start = s->tell(); - demuxer->movi_end = s->end_pos(); - switch(frmt) { - case RAW_FLAC: - { - uint8_t chunk[4]; - uint32_t block_size; - sh_audio->wtag = mmioFOURCC('f', 'L', 'a', 'C'); - /* loop through the metadata blocks; use a do-while construct since there - * will always be 1 metadata block */ - do { - if(s->read(chunk,4)!=4) return NULL; - block_size=(chunk[1]<<16)|(chunk[2]<<8)|chunk[3]; - switch (chunk[0] & 0x7F) { - /* STREAMINFO */ - case 0: - { - char sinfo[block_size]; - WAVEFORMATEX* w; - unsigned long long int total_samples; - sh_audio->wf = w = (WAVEFORMATEX*)mp_mallocz(sizeof(WAVEFORMATEX)); - MSG_V("STREAMINFO metadata\n"); - if (block_size != 34) { - MSG_V("expected STREAMINFO chunk of %d bytes\n",block_size); - return 0; - } - if(s->read(sinfo,block_size)!=(int)block_size) return NULL; - sh_audio->rate=be2me_32(*(uint32_t *)&sinfo[10]); - sh_audio->nch=w->nChannels=((sh_audio->rate>>9)&0x07)+1; - w->wBitsPerSample=((sh_audio->rate>>4)&0x1F)+1; - sh_audio->afmt=bps2afmt((w->wBitsPerSample+7)/8); - sh_audio->rate>>=12; - w->nSamplesPerSec=sh_audio->rate; - w->nAvgBytesPerSec = sh_audio->rate*afmt2bps(sh_audio->afmt)*sh_audio->nch; - w->nBlockAlign = sh_audio->nch*afmt2bps(sh_audio->afmt); - w->wBitsPerSample = 8*afmt2bps(sh_audio->afmt); - w->cbSize = 0; - total_samples = be2me_64(*(uint64_t *)&sinfo[10]) & 0x0FFFFFFFFFLL; /* 36 bits */ - MSG_V("Total fLaC samples: %llu (%llu secs)\n",total_samples,total_samples/afmt2bps(sh_audio->afmt)); - /*many streams have incorrectly computed this field. So ignore it for now! */ - demuxer->movi_end=0;//total_samples*sh_audio->samplesize; - break; - } - /* VORBIS_COMMENT */ - case 4: - /* CUESHEET */ - case 5: - /* 6-127 are presently reserved */ - default: - /* PADDING */ - case 1: - /* SEEKTABLE */ - case 3: - /* APPLICATION */ - case 2: - MSG_V("metadata %i size %u\n",chunk[0] & 0x7F,block_size); - s->skip(block_size); - break; - } - } while ((chunk[0] & 0x80) == 0); - /* We have reached 1st FRAME_HEADER here. */ - demuxer->movi_start = 0;//s->tell(); (ffmpeg.flac requires STREAM_HEADER to be proceed too!!!) - demuxer->movi_end += demuxer->movi_start; - break; - } - case RAW_SND_AU: { - unsigned hsize,dsize; - uint32_t id; - WAVEFORMATEX* w; - sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); - hsize=s->read_dword(); - dsize=s->read_dword(); - id = s->read_dword(); - sh_audio->afmt=bps2afmt(2); - if(id == 1) id = WAVE_FORMAT_MULAW; - else - if(id == 27) id=WAVE_FORMAT_ALAW; - else - if(id == 3) id=0x1; - w->wFormatTag = sh_audio->wtag = id; - /* Trickly mplayerxp will threat 'raw ' as big-endian */ - if(id == 0x1) sh_audio->wtag=mmioFOURCC('r','a','w',' '); - w->nSamplesPerSec = sh_audio->rate = s->read_dword(); - w->nChannels = sh_audio->nch = s->read_dword(); - w->nAvgBytesPerSec = sh_audio->rate*afmt2bps(sh_audio->afmt)*sh_audio->nch; - w->nBlockAlign = sh_audio->nch*afmt2bps(sh_audio->afmt); - w->wBitsPerSample = 8*afmt2bps(sh_audio->afmt); - w->cbSize = 0; - demuxer->movi_start = demuxer->stream->start_pos()+hsize; - demuxer->movi_end = demuxer->movi_start+hsize+dsize; - demuxer->movi_length = (demuxer->movi_end-demuxer->movi_start)/w->nAvgBytesPerSec; - } - break; - case RAW_MP1: - case RAW_MP2: - sh_audio->wtag = 0x50; - sh_audio->i_bps=mp3_brate; - sh_audio->rate=mp3_samplerate; - sh_audio->nch=mp3_channels; - demuxer->movi_start-=4; - if(!read_mp3v1_tags(demuxer,hdr,pos)) return 0; /* id3v1 may coexist with id3v2 */ - break; - case RAW_MP3: - sh_audio->wtag = 0x55; - sh_audio->i_bps=mp3_brate; - sh_audio->rate=mp3_samplerate; - sh_audio->nch=mp3_channels; - demuxer->movi_start-=4; - if(!read_mp3v1_tags(demuxer,hdr,pos)) return 0; /* id3v1 may coexist with id3v2 */ - break; - case RAW_AC3: - sh_audio->wtag = 0x2000; - if(!read_ac3_tags(demuxer,hdr,pos,&sh_audio->i_bps,&sh_audio->rate,&sh_audio->nch)) return 0; - break; - case RAW_DCA: - sh_audio->wtag = 0x2001; - if(!read_ddca_tags(demuxer,hdr,pos,&sh_audio->i_bps,&sh_audio->rate,&sh_audio->nch)) return 0; - sh_audio->i_bps/=8; - break; - case RAW_MUSEPACK: - { - const unsigned freqs[4]={ 44100, 48000, 37800, 32000 }; - uint32_t frames; - unsigned char bt; - sh_audio->wtag = mmioFOURCC('M','P','C',' '); - s->seek(4); - frames = s->read_dword(); - s->skip(2); - bt=s->read_char(); - sh_audio->wf = (WAVEFORMATEX *)mp_malloc(sizeof(WAVEFORMATEX)); - sh_audio->wf->wFormatTag = sh_audio->wtag; - sh_audio->wf->nChannels = 2; - sh_audio->wf->nSamplesPerSec = freqs[bt & 3]; - sh_audio->wf->nBlockAlign = 32 * 36; - sh_audio->wf->wBitsPerSample = 16; - sh_audio->i_bps = sh_audio->wf->nAvgBytesPerSec; - sh_audio->rate = sh_audio->wf->nSamplesPerSec; - sh_audio->audio.dwSampleSize = 0; - sh_audio->audio.dwScale = 32 * 36; - sh_audio->audio.dwRate = sh_audio->rate; - priv->pts_per_packet = (32 * 36) / (float)sh_audio->wf->nSamplesPerSec; - priv->dword = 0; - priv->pos = 32; // empty bit buffer - priv->length = 1152 * frames / (float)sh_audio->wf->nSamplesPerSec; - demuxer->movi_start = 24; /* skip header */ - demuxer->movi_end = s->end_pos(); - if (demuxer->movi_end > demuxer->movi_start && priv->length > 1) - sh_audio->wf->nAvgBytesPerSec = (demuxer->movi_end - demuxer->movi_start) / priv->length; - else - sh_audio->wf->nAvgBytesPerSec = 32 * 1024; // dummy to make mplayerxp not hang - sh_audio->wf->cbSize = 24; - break; - } - case RAW_VOC: - { - char chunk[4]; - unsigned size; - WAVEFORMATEX* w; - s->seek(0x14); - s->read(chunk,2); - size=le2me_16(*reinterpret_cast<uint16_t*>(&chunk[0])); - s->seek(size); - s->read(chunk,4); - if(chunk[0]!=0x01) { MSG_V("VOC unknown block type %02X\n",chunk[0]); return NULL; } - size=chunk[1]|(chunk[2]<<8)|(chunk[3]<<16); - sh_audio->wtag = 0x01; /* PCM */ - s->read(chunk,2); - if(chunk[1]!=0) { MSG_V("VOC unknown compression type %02X\n",chunk[1]); return NULL; } - demuxer->movi_start=s->tell(); - demuxer->movi_end=demuxer->movi_start+size; - sh_audio->rate=256-(1000000/chunk[0]); - sh_audio->nch=1; - sh_audio->afmt=bps2afmt(1); - sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); - w->wFormatTag = sh_audio->wtag; - w->nChannels = sh_audio->nch; - w->nSamplesPerSec = sh_audio->rate; - w->nAvgBytesPerSec = sh_audio->rate*afmt2bps(sh_audio->afmt)*sh_audio->nch; - w->nBlockAlign = 1024; - w->wBitsPerSample = (afmt2bps(sh_audio->afmt)+7)/8; - w->cbSize = 0; - break; - } - case RAW_WAV: { - off_t fpos,data_off=-1; - unsigned int chunk_type; - unsigned int chunk_size; - WAVEFORMATEX* w; - int l; - sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); - do - { - chunk_type = s->read_fourcc(); - chunk_size = s->read_dword_le(); - fpos=s->tell(); - switch(chunk_type) - { - case mmioFOURCC('f','m','t',' '): - { - l = chunk_size; - MSG_DBG2("Found %u bytes WAVEFORMATEX\n",l); - if(l < 16) { - MSG_ERR("Bad wav header length : too short !!!\n"); - delete sh_audio; - return NULL; - } - w->wFormatTag = sh_audio->wtag = s->read_word_le(); - w->nChannels = sh_audio->nch = s->read_word_le(); - w->nSamplesPerSec = sh_audio->rate = s->read_dword_le(); - w->nAvgBytesPerSec = s->read_dword_le(); - w->nBlockAlign = s->read_word_le(); - w->wBitsPerSample = s->read_word_le(); - sh_audio->afmt = bps2afmt((w->wBitsPerSample+7)/8); - w->cbSize = 0; - l -= 16; - if(l) s->skip(l); - } - break; - case mmioFOURCC('d', 'a', 't', 'a'): - MSG_DBG2("Found data chunk at %llu\n",fpos); - data_off=fpos; - s->skip(chunk_size); - break; - case mmioFOURCC('l', 'i', 's', 't'): - { - uint32_t cfcc; - MSG_DBG2("RIFF 'list' found\n"); - cfcc=s->read_fourcc(); - if(cfcc!=mmioFOURCC('a', 'd', 't', 'l')) { s->seek(fpos); break; } - do - { - unsigned int subchunk_type; - unsigned int subchunk_size; - unsigned int subchunk_id; - unsigned slen,rlen; - char note[256]; - MSG_DBG2("RIFF 'list' accepted\n"); - subchunk_type = s->read_fourcc(); - subchunk_size = s->read_dword_le(); - subchunk_id = s->read_dword_le(); - if(subchunk_type==mmioFOURCC('l','a','b','l')) - { - slen=subchunk_size-4; - rlen=std::min(sizeof(note),size_t(slen)); - s->read(note,rlen); - note[rlen]=0; - if(slen>rlen) s->skip(slen-rlen); - demuxer->info().add(INFOT_NAME,note); - MSG_DBG2("RIFF 'labl' %u %s accepted\n",slen,note); - } - else - if(subchunk_type==mmioFOURCC('n','o','t','e')) - { - slen=subchunk_size-4; - rlen=std::min(sizeof(note),size_t(slen)); - s->read(note,rlen); - note[rlen]=0; - if(slen>rlen) s->skip(slen-rlen); - demuxer->info().add(INFOT_COMMENTS,note); - MSG_DBG2("RIFF 'note' %u %s accepted\n",slen,note); - } - else s->skip(subchunk_size); - }while(s->tell()<fpos+chunk_size); - s->seek(fpos+chunk_size); - } - break; - default: - s->skip( chunk_size); - pfcc=(unsigned char *)&chunk_type; - MSG_DBG2("RIFF unhandled '%c%c%c%c' chunk skipped\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); - break; - } - } while (!s->eof()); - if(data_off==-1) - { - MSG_ERR("RIFF WAVE - no 'data' chunk found\n"); - return NULL; - } - s->seek(data_off); - demuxer->movi_start = s->tell(); - if(w->wFormatTag==0x01) /* PCM */ - { - int raw_id; - unsigned brate,samplerate,channels; - if((raw_id=audio_get_raw_id(demuxer,data_off,&brate,&samplerate,&channels))!=0) { - switch(raw_id) - { - case RAW_MP1: - case RAW_MP2: sh_audio->wtag=w->wFormatTag=0x50; break; - case RAW_MP3: sh_audio->wtag=w->wFormatTag=0x55; break; - case RAW_FLAC:sh_audio->wtag = mmioFOURCC('f', 'L', 'a', 'C'); break; - case RAW_SND_AU: { - unsigned hsize,dsize; - uint32_t id; - hsize=s->read_dword(); - dsize=s->read_dword(); - id = s->read_dword(); - if(id == 1) id = WAVE_FORMAT_MULAW; - else - if(id == 27) id=WAVE_FORMAT_ALAW; - else - if(id == 3) id=0x1; - w->wFormatTag = sh_audio->wtag = id; - /* Trickly mplayerxp will threat 'raw ' as big-endian */ - if(id == 0x1) sh_audio->wtag=mmioFOURCC('r','a','w',' '); - break; - } - case RAW_AC3: sh_audio->wtag=w->wFormatTag=0x2000; break; - case RAW_DCA: sh_audio->wtag=w->wFormatTag=0x2001; - if(brate) brate/=8; - break; - default: - case RAW_VOC: break; - case RAW_MUSEPACK: sh_audio->wtag = mmioFOURCC('M','P','+',' '); break; - } - if(brate) sh_audio->i_bps=brate; - if(channels) w->nChannels = sh_audio->nch = channels; - if(samplerate) w->nSamplesPerSec = sh_audio->rate = samplerate; - } - } - s->seek(data_off); - /* id3v1 tags may exist within WAV */ - if(sh_audio->wtag==0x50 || sh_audio->wtag==0x55) - { - s->seek(data_off); - s->read(hdr,4); - MSG_DBG2("Trying id3v1 at %llX\n",data_off); - if(!read_mp3v1_tags(demuxer,hdr,data_off)) demuxer->movi_end = s->end_pos(); - } - else - demuxer->movi_end = s->end_pos(); - s->seek(data_off); - } break; - } - - priv->frmt = frmt; - priv->last_pts = -1; - demuxer->priv = priv; - demuxer->audio->id = 0; - demuxer->audio->sh = sh_audio; - sh_audio->ds = demuxer->audio; - - if(priv->is_xing) - { - float framesize; - float bitrate; - framesize=(float)(demuxer->movi_end-demuxer->movi_start)/priv->nframes; - bitrate=(framesize*(float)(priv->srate<<priv->lsf))/144000.; - sh_audio->i_bps=(unsigned)(bitrate*(1000./8.)); - demuxer->movi_length= (unsigned)((float)(demuxer->movi_end-demuxer->movi_start)/(float)sh_audio->i_bps); - MSG_DBG2("stream length by xing header=%u secs\n",demuxer->movi_length); - } - MSG_V("demux_audio: audio data 0x%llX - 0x%llX \n",demuxer->movi_start,demuxer->movi_end); - if(s->tell() != demuxer->movi_start) - s->seek(demuxer->movi_start); - if(mp_conf.verbose && sh_audio->wf) print_wave_header(sh_audio->wf,sizeof(WAVEFORMATEX)); - 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 priv; -} - -static uint32_t mpc_get_bits(da_priv_t* priv, Stream* s, int bits) { - uint32_t out = priv->dword; - uint32_t mask = (1 << bits) - 1; - priv->pos += bits; - if (priv->pos < 32) { - out >>= (32 - priv->pos); - } - else { - s->read( (any_t*)&priv->dword, 4); - priv->dword = le2me_32(priv->dword); - priv->pos -= 32; - if (priv->pos) { - out <<= priv->pos; - out |= priv->dword >> (32 - priv->pos); - } - } - return out & mask; -} - -static int audio_demux(Demuxer *demuxer,Demuxer_Stream *ds) { - sh_audio_t* sh_audio; - Demuxer* demux; - da_priv_t* priv; - Stream* s; - int frmt,seof; -#ifdef MP_DEBUG - assert(ds != NULL); - assert(ds->sh != NULL); - assert(ds->demuxer != NULL); -#endif - sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); - demux = demuxer; - priv = static_cast<da_priv_t*>(demux->priv); - s = demux->stream; - - seof=s->eof(); - if(seof || (demux->movi_end && s->tell() >= demux->movi_end)) { - MSG_DBG2("audio_demux: EOF due: %s\n", - seof?"s->eof()":"s->tell() >= demux->movi_end"); - if(!seof) { - MSG_DBG2("audio_demux: stream_pos=%llu movi_end=%llu\n", - s->tell(), - demux->movi_end); - } - return 0; - } - frmt=priv->frmt; - if(frmt==RAW_WAV) - { - switch(sh_audio->wtag) - { - case 0x50: - case 0x55: frmt=RAW_MP3; break; - case 0x2000: frmt=RAW_AC3; break; - case 0x2001: frmt=RAW_DCA; break; - default: break; - } - } - switch(frmt) { - case RAW_MP1: - case RAW_MP2: - case RAW_MP3: - while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { - uint8_t hdr[4]; - int len; - s->read(hdr,4); - MSG_DBG2("audio_fillbuffer\n"); - len = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); - if(s->eof()) return 0; /* workaround for dead-lock (skip(-3)) below */ - if(len < 0) { - s->skip(-3); - } else { - if(s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) - return 0; - if(len>4) - { - Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len); - memcpy(dp->buffer(),hdr,4); - dp->resize(len+4); - len=s->read(dp->buffer() + 4,len-4); - priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; - dp->pts = priv->last_pts - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; - dp->flags=DP_NONKEYFRAME; - ds->add_packet(dp); - } - else s->skip(len); - return 1; - } - } break; - case RAW_AC3: - while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { - uint8_t hdr[8]; - int len; - unsigned dummy; - s->read(hdr,8); - len = ac3_decode_header(hdr,&dummy,&dummy,&dummy); - MSG_DBG2("audio_fillbuffer %u bytes\n",len); - if(s->eof()) return 0; /* workaround for dead-lock (skip(-7)) below */ - if(len < 0) { - s->skip(-7); - } else { - if(s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) - return 0; - if(len>8) - { - Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len); - memcpy(dp->buffer(),hdr,8); - dp->resize(len+8); - len=s->read(dp->buffer()+8,len-8); - priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; - dp->pts = priv->last_pts - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; - dp->flags=DP_NONKEYFRAME; - ds->add_packet(dp); - } - else s->skip(len); - return 1; - } - } break; - case RAW_DCA: - while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { - uint8_t hdr[16]; - int len; - unsigned dummy; - s->read(hdr,... [truncated message content] |
From: <nic...@us...> - 2012-12-09 13:46:33
|
Revision: 527 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=527&view=rev Author: nickols_k Date: 2012-12-09 13:46:25 +0000 (Sun, 09 Dec 2012) Log Message: ----------- remove class Buffered_Stream + cleanups + fixes Modified Paths: -------------- mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/cookies.cpp mplayerxp/libmpstream/pnm.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/url.cpp mplayerxp/libmpsub/vobsub.cpp mplayerxp/mp_msg.cpp mplayerxp/mp_msg.h mplayerxp/mplayerxp.cpp mplayerxp/xmpcore/sig_hand.cpp Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -144,7 +144,7 @@ if(id==mmioFOURCC('L','I','S','T')){ unsigned len=demuxer->stream->read_dword_le(); // list size id=demuxer->stream->read_dword_le(); // list type - MSG_DBG2("LIST %.4s len=%u\n",(char *) &id,len); + MSG_DBG2("LIST '%.4s' len=%u\n",(char *) &id,len); if(len >= 4) { len -= 4; list_end=demuxer->stream->tell()+((len+1)&(~1)); @@ -167,7 +167,7 @@ continue; } size2=demuxer->stream->read_dword_le(); - MSG_V("CHUNK %.4s len=%u\n",(char *) &id,size2); + MSG_V("CHUNK '%.4s' len=%u\n",(char *) &id,size2); chunksize=(size2+1)&(~1); infot=-1; switch(id){ Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -146,7 +146,7 @@ CACHE2_PACKET_TLOCK(cidx); c->packets[cidx].sp.len=c->sector_size; c->packets[cidx].filepos = c->stream->tell(); - c->stream->read(&c->packets[cidx].sp); + c->stream->read(c->packets[cidx].sp.buf,c->packets[cidx].sp.len); MSG_DBG2("CACHE2: read_packet at %lli (wanted %u got %u type %i)",c->packets[cidx].filepos,c->sector_size,c->packets[cidx].sp.len,c->packets[cidx].sp.type); if(mp_conf.verbose>1) if(c->packets[cidx].sp.len>8) { @@ -499,32 +499,28 @@ /* main interface here! */ -Cached_Stream::Cached_Stream(Stream::type_e t) - :Buffered_Stream(t) +Cached_Stream::Cached_Stream(libinput_t* libinput,int size,int _min,int prefill,Stream::type_e t) + :Stream(t) { -} -Cached_Stream::~Cached_Stream() {} - -int Cached_Stream::enable_cache(libinput_t* libinput,int size,int _min,int prefill){ int ss=sector_size()>1?sector_size():STREAM_BUFFER_SIZE; cache_vars_t* c; if (!(type()&Stream::Type_Seekable)) { // The stream has no 'fd' behind it, so is non-cacheable MSG_WARN("\rThis stream is non-cacheable\n"); - return 1; + return; } if(size<32*1024) size=32*1024; // 32kb min c=c2_cache_init(size,ss); cache_data=c; - if(!c) return 0; + if(!c) return; c->stream=this; c->prefill=size*prefill; c->read_filepos=start_pos(); unsigned rc; - if((rc=xmp_register_thread(NULL,sig_cache2,cache2_routine,"cache2"))==UINT_MAX) return 0; + if((rc=xmp_register_thread(NULL,sig_cache2,cache2_routine,"cache2"))==UINT_MAX) return; 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", @@ -541,14 +537,13 @@ END_FILEPOS(c)-c->read_filepos); if(c->eof) break; // file is smaller than prefill size if(mpdemux_check_interrupt(libinput,PREFILL_SLEEP_TIME)) - return 0; + return; } MSG_STATUS("cache info: size=%u min=%u prefill=%u\n",size,_min,prefill); - return 1; // parent exits + return; // parent exits } -void Cached_Stream::disable_cache() -{ +Cached_Stream::~Cached_Stream() { cache_vars_t* c; c=cache_data; if(c) { @@ -562,22 +557,17 @@ } } -int Cached_Stream::read(stream_packet_t* sp) { - if(cache_data) return c2_stream_read(cache_data,sp->buf,sp->len); - else return Buffered_Stream::read(sp); -} - int Cached_Stream::read(any_t* _mem,int total) { char *mem = reinterpret_cast<char*>(_mem); if(cache_data) return c2_stream_read(cache_data,mem,total); - else return Buffered_Stream::read(mem,total); + else return Stream::read(mem,total); } int Cached_Stream::eof() const { if(cache_data) return c2_stream_eof(cache_data); - else return Buffered_Stream::eof(); + else return Stream::eof(); } void Cached_Stream::eof(int _e) @@ -585,85 +575,32 @@ if(!_e) reset(); else { if(cache_data) c2_stream_set_eof(cache_data,_e); - else Buffered_Stream::eof(_e); + else Stream::eof(_e); } } -int Cached_Stream::read_char() -{ - if(cache_data) { - char retval; - c2_stream_read(cache_data,&retval,1); - return eof()?-256:retval; - } - else return Buffered_Stream::read_char(); -} - off_t Cached_Stream::tell() const { if(cache_data) return c2_stream_tell(cache_data); - else return Buffered_Stream::tell(); + else return Stream::tell(); } off_t Cached_Stream::seek(off_t _p) { if(cache_data) return c2_stream_seek(cache_data,_p); - else return Buffered_Stream::seek(_p); + else return Stream::seek(_p); } int Cached_Stream::skip(off_t len) { if(cache_data) return c2_stream_skip(cache_data,len); - else return Buffered_Stream::skip(len); + else return Stream::skip(len); } void Cached_Stream::reset() { if(cache_data) c2_stream_reset(cache_data); - else Buffered_Stream::reset(); + else Stream::reset(); } -unsigned int Cached_Stream::read_word(){ - unsigned short retval; - read((char *)&retval,2); - return me2be_16(retval); -} - -unsigned int Cached_Stream::read_dword(){ - unsigned int retval; - read((char *)&retval,4); - return me2be_32(retval); -} - -uint64_t Cached_Stream::read_qword(){ - uint64_t retval; - read((char *)&retval,8); - return me2be_64(retval); -} - -unsigned int Cached_Stream::read_word_le(){ - unsigned short retval; - read((char *)&retval,2); - return me2le_16(retval); -} - -unsigned int Cached_Stream::read_dword_le(){ - unsigned int retval; - read((char *)&retval,4); - return me2le_32(retval); -} - -uint64_t Cached_Stream::read_qword_le(){ - uint64_t retval; - read((char *)&retval,8); - return me2le_64(retval); -} - -unsigned int Cached_Stream::read_int24(){ - unsigned int y; - y = read_char(); - y=(y<<8)|read_char(); - y=(y<<8)|read_char(); - return y; -} } // namespace mpxp Modified: mplayerxp/libmpstream/cookies.cpp =================================================================== --- mplayerxp/libmpstream/cookies.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/cookies.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -160,7 +160,7 @@ char *cols[7]; if (parse_line(&ptr, cols)) { struct cookie_list_type *newc; - newc = new cookie_list_t; + newc = new(zeromem) cookie_list_t; newc->name = col_dup(cols[5]); newc->value = col_dup(cols[6]); newc->path = col_dup(cols[2]); Modified: mplayerxp/libmpstream/pnm.cpp =================================================================== --- mplayerxp/libmpstream/pnm.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/pnm.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -755,7 +755,7 @@ // pnm_t *pnm_connect(const char *mrl) { pnm_t *pnm_connect(Tcp& tcp,const char *path) { - pnm_t *p=new pnm_t; + pnm_t *p=new(zeromem) pnm_t; int need_response=0; p->path=mp_strdup(path); Modified: mplayerxp/libmpstream/s_dvdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -95,7 +95,7 @@ DvdNav_Stream_Interface::DvdNav_Stream_Interface(libinput_t* libinput) :Stream_Interface(libinput), - hlev(*new dvdnav_highlight_event_t) {} + hlev(*new(zeromem) dvdnav_highlight_event_t) {} DvdNav_Stream_Interface::~DvdNav_Stream_Interface() { dvdnav_close(dvdnav); delete &hlev; Modified: mplayerxp/libmpstream/s_file.cpp =================================================================== --- mplayerxp/libmpstream/s_file.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/s_file.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -61,7 +61,6 @@ /* decreasing number of packet from 256 to 10 speedups cache2 from 3.27% to 1.26% with full speed 1.04% for -nocache */ /* Note: Please locate sector_size changinf after all read/write operations of open() function */ - spos = 0; return MPXP_Ok; } @@ -69,31 +68,20 @@ off_t File_Stream_Interface::size() const { return end_pos; } off_t File_Stream_Interface::sector_size() const { return STREAM_BUFFER_SIZE; } -#ifndef TEMP_FAILURE_RETRY -#define TEMP_FAILURE_RETRY(x) (x) -#endif - int File_Stream_Interface::read(stream_packet_t*sp) { /* Should we repeate read() again on these errno: `EAGAIN', `EIO' ??? */ sp->type=0; - sp->len = TEMP_FAILURE_RETRY(::read(fd,sp->buf,sp->len)); + sp->len = ::read(fd,sp->buf,sp->len); if(sp->len>0) spos += sp->len; return sp->len; } -# define TEMP_FAILURE_RETRY64(expression) \ - (__extension__ \ - ({ long long int __result; \ - do __result = (long long int) (expression); \ - while (__result == -1LL && errno == EINTR); \ - __result; })) - off_t File_Stream_Interface::seek(off_t pos) { - spos=TEMP_FAILURE_RETRY64(::lseek(fd,pos,SEEK_SET)); + spos=::lseek(fd,pos,SEEK_SET); return spos; } Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/stream.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -3,6 +3,7 @@ using namespace mpxp; #include <algorithm> +#include <ctype.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -115,10 +116,8 @@ unsigned Stream::sector_size() const { return driver->sector_size(); } float Stream::stream_pts() const { return driver->stream_pts(); } void Stream::type(Stream::type_e t) { _type=t; } -off_t Stream::pos() const { return _pos; } -void Stream::pos(off_t p) { _pos = p; } int Stream::eof() const { return _eof; } -void Stream::eof(int e) { _eof = e; } +void Stream::eof(int e) { if(!e) reset(); _eof = e; } MPXP_Rc Stream::open(libinput_t*libinput,const char* filename,int* ff) { @@ -155,22 +154,35 @@ return MPXP_False; } MPXP_Rc Stream::ctrl(unsigned cmd,any_t* param) { return driver->ctrl(cmd,param); } -int Stream::read(stream_packet_t * sp) { return driver->read(sp); } +int Stream::read(stream_packet_t* sp) { return driver->read(sp); } int Stream::read(any_t* mem,int total) { + off_t _off; + int rc; stream_packet_t sp; sp.type=0; sp.buf=(char *)mem; sp.len=total; - return read(&sp); + _off=tell(); + rc=read(&sp); + if(rc<=0) eof(1); + /* ------------ print packet ---------- */ + unsigned j,_lim=std::min(sp.len,20); + int printable=1; + MSG_DBG4("%i=[stream.read(%p,%i)] [%016X]",rc,sp.buf,sp.len,_off); + for(j=0;j<_lim;j++) { if(!isprint(sp.buf[j])) { printable=0; break; } } + if(printable) MSG_DBG4("%20s",sp.buf); + else for(j=0;j<_lim;j++) MSG_DBG4("%02X ",(unsigned char)sp.buf[j]); + /* ------------ print packet ---------- */ + return rc; } off_t Stream::seek(off_t off) { return driver->seek(off); } -int Stream::skip(off_t off) { return driver->seek(_pos+off); } +int Stream::skip(off_t off) { return driver->seek(tell()+off)?1:0; } off_t Stream::tell() const { return driver->tell(); } void Stream::close() { driver->close(); } -void Stream::reset(){ +void Stream::reset() { if(_eof){ - _pos=0; + seek(0); _eof=0; } } @@ -234,271 +246,16 @@ } } -Buffered_Stream::Buffered_Stream(Stream::type_e _t) - :Stream(_t), - buf_pos(0),buf_len(0),buffer(NULL) -{ -} +/* ================================================ */ -Buffered_Stream::~Buffered_Stream() { - if(buffer) delete buffer; -} - -//=================== STREAMER ========================= -MPXP_Rc Buffered_Stream::open(libinput_t*libinput,const char* filename,int* ff) -{ - MPXP_Rc rc=Stream::open(libinput,filename,ff); - if(rc==MPXP_Ok) { - delete buffer; - buf_len=sector_size(); - buffer= new unsigned char [buf_len]; - buf_pos=0; - } - return rc; -} - -int Buffered_Stream::read_cbuffer(){ - int len,legacy_eof; - stream_packet_t sp; - if(eof()) { buf_pos=buf_len=0; return 0; } - while(1) { - sp.type=0; - sp.len=sector_size(); - sp.buf=(char *)buffer; - len = Stream::read(&sp); - if(sp.type) { -// if(event_handler) event_handler(this,&sp); - continue; - } - if(ctrl(SCTRL_EOF,NULL)==MPXP_Ok)legacy_eof=1; - else legacy_eof=0; - if(sp.len<=0 || legacy_eof) { - MSG_DBG3("nc_stream_read_cbuffer: Guess EOF\n"); - eof(1); - buf_pos=buf_len=0; - if(errno) { MSG_WARN("nc_stream_read_cbuffer(drv:%s) error: %s\n",driver_info->mrl,strerror(errno)); errno=0; } - return 0; - } - break; - } - buf_pos=0; - buf_len=sp.len; - pos(pos()+sp.len); - MSG_DBG3("nc_stream_read_cbuffer(%s) done[sector_size=%i len=%i]: buf_pos=%u buf_len=%u pos=%llu\n",driver_info->mrl,sector_size(),len,buf_pos,buf_len,pos()); - return buf_len; -} - -off_t Buffered_Stream::seek_long(off_t _p) -{ - off_t newpos=_p; - unsigned _sector_size=sector_size(); - - buf_pos=buf_len=0; -// newpos=pos&(~((long long)sector_size-1)); - newpos=(_p/(long long)_sector_size)*(long long)_sector_size; - - _p-=newpos; - MSG_DBG3("nc_stream_seek_long to %llu\n",newpos); - if(newpos==0 || newpos!=pos()) { - pos(Stream::seek(newpos)); - if(errno) { MSG_WARN("nc_stream_seek(drv:%s) error: %s\n",driver_info->mrl,strerror(errno)); errno=0; } - } - MSG_DBG3("nc_stream_seek_long after: %llu\n",pos()); - - if(pos()<0) eof(1); - else { - eof(0); - read_cbuffer(); - if(_p>=0 && _p<=buf_len){ - buf_pos=_p; - MSG_DBG3("nc_stream_seek_long done: pos=%llu buf_pos=%lu buf_len=%lu\n",pos(),buf_pos,buf_len); - if(buf_pos==buf_len) { - MSG_DBG3("nc_stream_seek_long: Guess EOF\n"); - eof(1); - } - return _p; - } - } - MSG_V("stream_seek: WARNING! Can't seek to 0x%llX !\n",(long long)(_p+newpos)); - return 0; -} - -int Buffered_Stream::read_char() -{ - unsigned char retval; - read(&retval,1); - return eof()?-256:retval; -} - -int Buffered_Stream::read(stream_packet_t* sp) { - return Stream::read(sp); -} - -int Buffered_Stream::read(any_t* _mem,int total){ - int i,x,ilen,_total=total,got_len; - char *mem=reinterpret_cast<char *>(_mem); - MSG_DBG3( "nc_stream_read %u bytes from %llu\n",total,file_pos()+buf_pos); - if(eof()) return 0; - x=buf_len-buf_pos; - if(x>0) { - ilen=std::min(_total,x); - memcpy(mem,&buffer[buf_pos],ilen); - MSG_DBG3("nc_stream_read: copy prefetched %u bytes\n",ilen); - buf_pos+=ilen; - mem+=ilen; _total-=ilen; - } - ilen=_total; - ilen /= sector_size(); - ilen *= sector_size(); - /* - Perform direct reading to avoid an additional memcpy(). - This case happens for un-compressed streams or for movies with large image. - Note: for stream with high compression-ratio stream reading is invisible - from point of CPU usage. - */ - got_len=0; - if(ilen) { - int rlen,stat,tile; - any_t*smem; - smem=buffer; - rlen=ilen; - stat=0; - tile=0; - eof(0); - got_len=0; - while(rlen) { - buffer=(unsigned char *)mem; - buf_len=rlen; - read_cbuffer(); - mem += std::min(rlen,(int)buf_len); - tile=buf_len-rlen; - rlen -= std::min(rlen,(int)buf_len); - got_len += std::min(rlen,(int)buf_len); - if(eof()) break; - stat++; - } - buffer=reinterpret_cast<unsigned char *>(smem); - buf_len=0; - buf_pos=0; - ilen += rlen; - MSG_DBG2("nc_stream_read got %u bytes directly for %u calls\n",got_len,stat); - if(tile && !eof()) { - /* should never happen. Store data back to native cache! */ - MSG_DBG3("nc_stream_read: we have tile %u bytes\n",tile); - buf_pos=0; - memcpy(buffer,&mem[buf_len-tile],std::min(int(STREAM_BUFFER_SIZE),tile)); - buf_len=std::min(int(STREAM_BUFFER_SIZE),tile); - } - } - ilen=_total-ilen; - if(eof()) return got_len; - while(ilen) { - if(buf_pos>=buf_len){ - read_cbuffer(); - if(buf_len<=0) return -1; // EOF - } - x=buf_len-buf_pos; - if(buf_pos>buf_len) MSG_WARN( "stream_read: WARNING! buf_pos(%i)>buf_len(%i)\n",buf_pos,buf_len); - if(x>ilen) x=ilen; - memcpy(mem,&buffer[buf_pos],x); - buf_pos+=x; - mem+=x; ilen-=x; - } - MSG_DBG3( "nc_stream_read got %u bytes ",total); - for(i=0;i<std::min(8,total);i++) MSG_DBG3("%02X ",(int)((unsigned char)mem[i])); - MSG_DBG3("\n"); - return total; -} - -off_t Buffered_Stream::tell() const { - off_t retval; - retval = file_pos()+buf_pos; - return retval; -} - -off_t Buffered_Stream::seek(off_t _p){ - MSG_DBG3( "nc_stream_seek to %llu\n",(long long)_p); - if(type()&Stream::Type_Memory) { - buf_pos=_p; - return _p; - } else if(_p>=file_pos() && _p<file_pos()+buf_len) { - buf_pos=_p-file_pos(); - return _p; - } - return (type()&Stream::Type_Seekable)?seek_long(_p):_p; -} - -int Buffered_Stream::skip(off_t len){ - if(len<0 || (len>2*STREAM_BUFFER_SIZE && type()&Stream::Type_Seekable)) { - /* negative or big skip! */ - return seek(tell()+len); - } - while(len>0){ - int x=buf_len-buf_pos; - if(x==0){ - if(!read_cbuffer()) return 0; // EOF - x=buf_len-buf_pos; - } - if(x>len) x=len; - buf_pos+=x; len-=x; - } - return 1; -} - -unsigned int Buffered_Stream::read_word(){ - unsigned short retval; - read((char *)&retval,2); - return me2be_16(retval); -} - -unsigned int Buffered_Stream::read_dword(){ - unsigned int retval; - read((char *)&retval,4); - return me2be_32(retval); -} - -uint64_t Buffered_Stream::read_qword(){ - uint64_t retval; - read((char *)&retval,8); - return me2be_64(retval); -} - -unsigned int Buffered_Stream::read_word_le(){ - unsigned short retval; - read((char *)&retval,2); - return me2le_16(retval); -} - -unsigned int Buffered_Stream::read_dword_le(){ - unsigned int retval; - read((char *)&retval,4); - return me2le_32(retval); -} - -uint64_t Buffered_Stream::read_qword_le(){ - uint64_t retval; - read((char *)&retval,8); - return me2le_64(retval); -} - -unsigned int Buffered_Stream::read_int24(){ - unsigned int y; - y = read_char(); - y=(y<<8)|read_char(); - y=(y<<8)|read_char(); - return y; -} - Memory_Stream::Memory_Stream(const unsigned char* data,unsigned len) :Stream(Stream::Type_Memory), _len(len) { - pin=STREAM_PIN; -// may be methods of class Memory_Stream : public Stream - buffer=new uint8_t [len]; - reset(); - pos(0); - memcpy(buffer,data,len); + buffer=new uint8_t [len]; + reset(); + _pos=0; + memcpy(buffer,data,len); } Memory_Stream::~Memory_Stream() { delete buffer; } @@ -508,65 +265,15 @@ int Memory_Stream::read(any_t* mem,int total) { memcpy(mem,buffer,total); - pos(pos()+total); + _pos+=total; return total; } -off_t Memory_Stream::tell() const { return pos(); } -off_t Memory_Stream::seek(off_t p) { pos(p); return pos(); } -int Memory_Stream::skip(off_t len) { pos(pos()+len); return 1; } -int Memory_Stream::eof() const { return pos()>=_len; } -void Memory_Stream::eof(int e) { UNUSED(e); } -void Memory_Stream::reset() { pos(0); } +off_t Memory_Stream::tell() const { return _pos; } +off_t Memory_Stream::seek(off_t p) { return _pos=p; } +int Memory_Stream::skip(off_t len) { _pos+=len; return 1; } +int Memory_Stream::eof() const { return _pos>=_len; } +void Memory_Stream::eof(int e) { e?_pos=_len+1:_pos=0; } +void Memory_Stream::reset() { _pos=0; } -int Memory_Stream::read_char(){ - int retval; - read((char *)&retval,1); - return eof()?-256:retval; -} - -unsigned int Memory_Stream::read_word(){ - unsigned short retval; - read((char *)&retval,2); - return me2be_16(retval); -} - -unsigned int Memory_Stream::read_dword(){ - unsigned int retval; - read((char *)&retval,4); - return me2be_32(retval); -} - -uint64_t Memory_Stream::read_qword(){ - uint64_t retval; - read((char *)&retval,8); - return me2be_64(retval); -} - -unsigned int Memory_Stream::read_word_le(){ - unsigned short retval; - read((char *)&retval,2); - return me2le_16(retval); -} - -unsigned int Memory_Stream::read_dword_le(){ - unsigned int retval; - read((char *)&retval,4); - return me2le_32(retval); -} - -uint64_t Memory_Stream::read_qword_le(){ - uint64_t retval; - read((char *)&retval,8); - return me2le_64(retval); -} - -unsigned int Memory_Stream::read_int24(){ - unsigned int y; - y = read_char(); - y=(y<<8)|read_char(); - y=(y<<8)|read_char(); - return y; -} - } //namespace mpxp Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/stream.h 2012-12-09 13:46:25 UTC (rev 527) @@ -59,7 +59,6 @@ virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format); virtual int read(any_t* mem,int total); - virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual int skip(off_t len); virtual off_t tell() const; @@ -69,8 +68,6 @@ virtual void reset(); virtual void type(type_e);/**< assign new propertie for the stream (see STREAMTYPE_ for detail) */ virtual type_e type(); /**< properties of the stream (see STREAMTYPE_ for detail) */ - virtual off_t pos() const; /**< SOF offset from begin of stream */ - virtual void pos(off_t); /**< SOF offset from begin of stream */ virtual int eof() const; /**< indicates EOF */ virtual void eof(int); /**< set EOF */ virtual off_t start_pos() const; /**< real start of stream (without internet's headers) */ @@ -93,10 +90,10 @@ int file_format; /**< detected file format (by http:// protocol for example) */ const stream_interface_info_t* driver_info; private: + int read(stream_packet_t* sp); Stream_Interface* driver; /**< low-level stream driver */ Opaque* priv; /**< private data used by stream driver */ type_e _type; - off_t _pos; /**< SOF offset from begin of stream */ int _eof; /**< indicates EOF */ }; inline Stream::type_e operator~(Stream::type_e a) { return static_cast<Stream::type_e>(~static_cast<unsigned>(a)); } @@ -120,77 +117,27 @@ virtual void eof(int eof); virtual void reset(); - virtual int read_char(); - virtual unsigned read_word(); - virtual unsigned read_dword(); - virtual unsigned read_word_le(); - virtual unsigned read_dword_le(); - virtual uint64_t read_qword(); - virtual uint64_t read_qword_le(); - virtual unsigned read_int24(); - virtual off_t start_pos() const; /**< real start of stream (without internet's headers) */ virtual off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ virtual unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ private: + off_t _pos; unsigned _len; uint8_t* buffer; }; - struct Buffered_Stream : public Stream { + struct Cached_Stream : public Stream { public: - Buffered_Stream(Stream::type_e type=Stream::Type_Unknown); - virtual ~Buffered_Stream(); - - virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format); - virtual off_t seek_long(off_t pos); - virtual int read(any_t* mem,int total); - virtual int read(stream_packet_t * sp); - virtual off_t tell() const; - virtual off_t seek(off_t pos); - virtual int skip(off_t len); - - virtual int read_char(); - virtual unsigned read_word(); - virtual unsigned read_dword(); - virtual unsigned read_word_le(); - virtual unsigned read_dword_le(); - virtual uint64_t read_qword(); - virtual uint64_t read_qword_le(); - virtual unsigned read_int24(); - private: - off_t file_pos() const { return pos()-buf_len; } - int read_cbuffer(); - unsigned int buf_pos; /**< position whitin of small cache */ - unsigned int buf_len; /**< length of small cache */ - unsigned char* buffer;/**< buffer of small cache */ - }; - - struct Cached_Stream : public Buffered_Stream { - public: - Cached_Stream(Stream::type_e type=Stream::Type_Unknown); + Cached_Stream(libinput_t* libinput,int size,int _min,int prefill,Stream::type_e type=Stream::Type_Unknown); virtual ~Cached_Stream(); - virtual int enable_cache(libinput_t* libinput,int size,int min,int prefill); - virtual void disable_cache(); - virtual int read(any_t* mem,int total); - virtual int read(stream_packet_t * sp); virtual off_t tell() const; virtual off_t seek(off_t pos); virtual int skip(off_t len); virtual int eof() const; virtual void eof(int eof); virtual void reset(); - - virtual int read_char(); - virtual unsigned read_word(); - virtual unsigned read_dword(); - virtual unsigned read_word_le(); - virtual unsigned read_dword_le(); - virtual uint64_t read_qword(); - virtual uint64_t read_qword_le(); - virtual unsigned read_int24(); private: cache_vars_t* cache_data; /**< large cache */ }; Modified: mplayerxp/libmpstream/url.cpp =================================================================== --- mplayerxp/libmpstream/url.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpstream/url.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -66,7 +66,7 @@ } // Create the URL container - Curl = new URL_t; + Curl = new(zeromem) URL_t; if( Curl==NULL ) { MSG_FATAL("MemAllocFailed\n"); goto err_out; Modified: mplayerxp/libmpsub/vobsub.cpp =================================================================== --- mplayerxp/libmpsub/vobsub.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/libmpsub/vobsub.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -353,7 +353,7 @@ queue->packets_reserve *= 2; } else { - queue->packets = new packet_t; + queue->packets = new(zeromem) packet_t; if (queue->packets == NULL) { MSG_ERR("mp_malloc failure"); return -1; Modified: mplayerxp/mp_msg.cpp =================================================================== --- mplayerxp/mp_msg.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/mp_msg.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -43,7 +43,7 @@ { unsigned i; int _color[8]={0,4,2,6,1,5,3,7}; - priv_t*priv=new priv_t; + priv_t*priv=new(zeromem) priv_t; mpxp_context().msg_priv=priv; memcpy(priv->_color,_color,sizeof(_color)); pthread_mutex_init(&priv->mp_msg_mutex,NULL); Modified: mplayerxp/mp_msg.h =================================================================== --- mplayerxp/mp_msg.h 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/mp_msg.h 2012-12-09 13:46:25 UTC (rev 527) @@ -1,6 +1,5 @@ #ifndef __MP_MSG_H #define __MP_MSG_H 1 - #include "mplayerxp.h" /* TODO: more highlighted levels */ @@ -85,24 +84,26 @@ return mpxp_printf((MSGL_STATUS<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()); } __always_inline int MSG_V(const char* args,...) { - return mpxp_printf((MSGL_V<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()); + return mp_conf.verbose ? + mpxp_printf((MSGL_V<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()): + 0; } -#ifdef MP_DEBUG + __always_inline int MSG_DBG2(const char* args,...) { - return mpxp_printf((MSGL_DBG2<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()); + return mp_conf.verbose>1 ? + mpxp_printf((MSGL_DBG2<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()): + 0; } __always_inline int MSG_DBG3(const char* args,...) { - return mpxp_printf((MSGL_DBG3<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()); + return mp_conf.verbose>2 ? + mpxp_printf((MSGL_DBG3<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()): + 0; } __always_inline int MSG_DBG4(const char* args,...) { - return mpxp_printf((MSGL_DBG4<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()); + return mp_conf.verbose>3 ? + mpxp_printf((MSGL_DBG4<<28)|(MSGT_CLASS&0x0FFFFFFF),args,__va_arg_pack ()): + 0; } - -#else -__always_inline int MSG_DBG2(const char* args,...) { return mpxp_print_dummy(args); } -__always_inline int MSG_DBG3(const char* args,...) { return mpxp_print_dummy(args); } -__always_inline int MSG_DBG4(const char* args,...) { return mpxp_print_dummy(args); } -#endif #else // __va_arg_pack #ifdef __GNUC__ #define mpxp_print(mod,lev, args... ) ((lev<(mp_conf.verbose+MSGL_V))?(mpxp_printf(((lev&0xF)<<28)|(mod&0x0FFFFFFF),## args)):(mpxp_print_dummy(args))) Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/mplayerxp.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -336,11 +336,11 @@ } } void MPXPSystem::uninit_player(unsigned int mask){ - Cached_Stream* stream=NULL; + Stream* stream=NULL; sh_audio_t* sh_audio=NULL; sh_video_t* sh_video=NULL; if(_demuxer) { - stream=static_cast<Cached_Stream*>(_demuxer->stream); + stream=static_cast<Stream*>(_demuxer->stream); sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); } @@ -959,7 +959,7 @@ } int MPXPSystem::handle_playlist(const char *filename) const { - Cached_Stream* stream=static_cast<Cached_Stream*>(_demuxer->stream); + Stream* stream=static_cast<Stream*>(_demuxer->stream); int eof=0; play_tree_t* entry; // Handle playlist @@ -995,7 +995,7 @@ void MPXPSystem::init_dvd_nls() const { /* Add NLS support here */ - Cached_Stream* stream=static_cast<Cached_Stream*>(_demuxer->stream); + Stream* stream=static_cast<Stream*>(_demuxer->stream); char *lang; if(!mp_conf.audio_lang) mp_conf.audio_lang=nls_get_screen_cp(); MP_UNIT("dvd lang->id"); @@ -1022,7 +1022,7 @@ sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); int fmt; char *c; - MSG_INFO("[Cached_Stream]:"); + MSG_INFO("[Stream]:"); if(sh_video) { MSG_INFO("Video="); if(sh_video->bih)fmt=sh_video->bih->biCompression; @@ -1073,7 +1073,7 @@ 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); - Cached_Stream* stream=static_cast<Cached_Stream*>(_demuxer->stream); + Stream* stream=static_cast<Stream*>(_demuxer->stream); if (mp_conf.spudec_ifo) { unsigned int palette[16], width, height; MP_UNIT("spudec_init_vobsub"); @@ -1346,7 +1346,7 @@ #ifdef USE_OSD int MPXPSystem::paint_osd(int* osd_visible,int* in_pause) { - Cached_Stream* stream=static_cast<Cached_Stream*>(_demuxer->stream); + Stream* stream=static_cast<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; @@ -1416,7 +1416,7 @@ #endif int MPXPSystem::handle_input(seek_args_t* _seek,osd_args_t* osd,input_state_t* state) { - Cached_Stream* stream=static_cast<Cached_Stream*>(_demuxer->stream); + Stream* stream=static_cast<Stream*>(_demuxer->stream); sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); int v_bright=0; int v_cont=0; @@ -1603,7 +1603,7 @@ case MP_CMD_DVDNAV: if(stream->ctrl(SCRTL_MPXP_CMD,(any_t*)cmd->args[0].v.i)==MPXP_Ok) { if(cmd->args[0].v.i!=MP_CMD_DVDNAV_SELECT) { - stream->type(Cached_Stream::Type_Menu); + stream->type(Stream::Type_Menu); state->need_repaint=1; } osd_function=OSD_DVDMENU; @@ -1669,7 +1669,7 @@ mpxp_init_antiviral_protection(1); mpxp_test_backtrace(); int i; - Cached_Stream* stream=NULL; + Stream* stream=NULL; int stream_dump_type=0; input_state_t input_state = { 0, 0, 0 }; char *ao_subdevice; @@ -1686,7 +1686,7 @@ // Yes, it really must be placed in stack or in very secret place PointerProtector<MPXPSecureKeys> ptr_protector; - secure_keys=ptr_protector.protect(new MPXPSecureKeys(10)); + secure_keys=ptr_protector.protect(new(zeromem) MPXPSecureKeys(10)); mpxp_init_structs(); MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; @@ -1802,7 +1802,11 @@ if(stream_dump_type) mp_conf.s_cache_size=0; MP_UNIT("open_stream"); - if(!input_state.after_dvdmenu) stream=new(zeromem) Cached_Stream; + // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts) + if(!input_state.after_dvdmenu) + stream=(mp_conf.s_cache_size && !stream_dump_type)? + new(zeromem) Cached_Stream(MPXPSys.libinput(),mp_conf.s_cache_size*1024,mp_conf.s_cache_size*1024/5,mp_conf.s_cache_size*1024/20): + new(zeromem) Stream; if(stream->open(MPXPSys.libinput(),filename,&file_format)!=MPXP_Ok) { // error... MSG_ERR("Can't open: %s\n",filename); eof = MPXPSys.libmpdemux_was_interrupted(PT_NEXT_ENTRY); @@ -1817,13 +1821,6 @@ MP_UNIT(NULL); - // 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(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); Modified: mplayerxp/xmpcore/sig_hand.cpp =================================================================== --- mplayerxp/xmpcore/sig_hand.cpp 2012-12-08 14:01:01 UTC (rev 526) +++ mplayerxp/xmpcore/sig_hand.cpp 2012-12-09 13:46:25 UTC (rev 527) @@ -56,6 +56,7 @@ void init_signal_handling( void ) { +#if 0 /*========= Catch terminate signals: ================*/ /* terminate requests:*/ signal(SIGTERM,my_callback); /* kill*/ @@ -70,6 +71,7 @@ signal(SIGILL,my_callback); /* illegal instruction */ signal(SIGFPE,my_callback); /* floating point exc. */ signal(SIGABRT,my_callback); /* abort() */ +#endif #ifndef NDEBUG /* on many systems default coresize is 0. Enable any coresize here. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-08 14:01:08
|
Revision: 526 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=526&view=rev Author: nickols_k Date: 2012-12-08 14:01:01 +0000 (Sat, 08 Dec 2012) Log Message: ----------- segfault-- Modified Paths: -------------- mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libvo/video_out.cpp Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-12-08 13:40:58 UTC (rev 525) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-12-08 14:01:01 UTC (rev 526) @@ -301,13 +301,11 @@ 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(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(s,ampi[j]); - free_mp_image(ampi[j]); } } else @@ -317,9 +315,9 @@ 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(s,ampi[i]); - free_mp_image(ampi[i]); } } + for(i=0;i<num_slices;i++) free_mp_image(ampi[i]); } else { MSG_DBG2("Put whole frame[%ux%u]\n",mpi->width,mpi->height); vf_put_slice(s,mpi); Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-12-08 13:40:58 UTC (rev 525) +++ mplayerxp/libvo/video_out.cpp 2012-12-08 14:01:01 UTC (rev 526) @@ -577,7 +577,7 @@ 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]) { + if(mpi->stride[i] && dstStride[i]) { if(finalize) stream_copy_pic(dst[i],ps_src[i],_w[i],_h[i],dstStride[i],mpi->stride[i]); else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-08 13:41:05
|
Revision: 525 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=525&view=rev Author: nickols_k Date: 2012-12-08 13:40:58 +0000 (Sat, 08 Dec 2012) Log Message: ----------- fixes Modified Paths: -------------- mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/mplayerxp.cpp Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-12-08 13:27:53 UTC (rev 524) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-12-08 13:40:58 UTC (rev 525) @@ -212,7 +212,7 @@ // Check if a file is a BMP file depending on whether starts with 'BM' static MPXP_Rc bmp_probe(Demuxer *demuxer) { - if (stream_read_word(demuxer->stream) == (('B' << 8) | 'M')) + if (demuxer->stream->read_word() == (('B' << 8) | 'M')) return MPXP_Ok; else return MPXP_False; @@ -225,8 +225,8 @@ { bmp_image_t *bmp_image = static_cast<bmp_image_t*>(demuxer->priv); - stream_reset(demuxer->stream); - stream_seek(demuxer->stream, bmp_image->image_offset); + demuxer->stream->reset(); + demuxer->stream->seek( bmp_image->image_offset); demuxer->video->read_packet(demuxer->stream, bmp_image->image_size, 0, bmp_image->image_offset, DP_KEYFRAME); return 1; @@ -240,12 +240,12 @@ bmp_image_t *bmp_image; // go back to the beginning - stream_reset(demuxer->stream); - stream_seek(demuxer->stream, demuxer->stream->start_pos+2); - filesize = stream_read_dword_le(demuxer->stream); - stream_skip(demuxer->stream, 4); - data_offset = stream_read_word_le(demuxer->stream); - stream_skip(demuxer->stream, 2); + demuxer->stream->reset(); + demuxer->stream->seek( demuxer->stream->start_pos()+2); + filesize = demuxer->stream->read_dword_le(); + demuxer->stream->skip( 4); + data_offset = demuxer->stream->read_word_le(); + demuxer->stream->skip( 2); // create a new video stream header sh_video = demuxer->new_sh_video(); @@ -260,19 +260,19 @@ // load the BITMAPINFOHEADER // allocate size and take the palette table into account sh_video->bih = (BITMAPINFOHEADER *)mp_malloc(data_offset - 12); - sh_video->bih->biSize = stream_read_dword_le(demuxer->stream); - sh_video->bih->biWidth = stream_read_dword_le(demuxer->stream); - sh_video->bih->biHeight = stream_read_dword_le(demuxer->stream); - sh_video->bih->biPlanes = stream_read_word_le(demuxer->stream); - sh_video->bih->biBitCount = stream_read_word_le(demuxer->stream); - sh_video->bih->biCompression = stream_read_dword_le(demuxer->stream); - sh_video->bih->biSizeImage = stream_read_dword_le(demuxer->stream); - sh_video->bih->biXPelsPerMeter = stream_read_dword_le(demuxer->stream); - sh_video->bih->biYPelsPerMeter = stream_read_dword_le(demuxer->stream); - sh_video->bih->biClrUsed = stream_read_dword_le(demuxer->stream); - sh_video->bih->biClrImportant = stream_read_dword_le(demuxer->stream); + sh_video->bih->biSize = demuxer->stream->read_dword_le(); + sh_video->bih->biWidth = demuxer->stream->read_dword_le(); + sh_video->bih->biHeight = demuxer->stream->read_dword_le(); + sh_video->bih->biPlanes = demuxer->stream->read_word_le(); + sh_video->bih->biBitCount = demuxer->stream->read_word_le(); + sh_video->bih->biCompression = demuxer->stream->read_dword_le(); + sh_video->bih->biSizeImage = demuxer->stream->read_dword_le(); + sh_video->bih->biXPelsPerMeter = demuxer->stream->read_dword_le(); + sh_video->bih->biYPelsPerMeter = demuxer->stream->read_dword_le(); + sh_video->bih->biClrUsed = demuxer->stream->read_dword_le(); + sh_video->bih->biClrImportant = demuxer->stream->read_dword_le(); // fetch the palette - stream_read(demuxer->stream, (unsigned char *)(sh_video->bih) + 40, + demuxer->stream->read( (unsigned char *)(sh_video->bih) + 40, sh_video->bih->biClrUsed * 4); // load the data Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-08 13:27:53 UTC (rev 524) +++ mplayerxp/libmpstream/stream.cpp 2012-12-08 13:40:58 UTC (rev 525) @@ -225,7 +225,7 @@ return y; } -void print_stream_drivers( void ) +void Stream::print_drivers() { unsigned i; MSG_INFO("Available stream drivers:\n"); Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-08 13:27:53 UTC (rev 524) +++ mplayerxp/libmpstream/stream.h 2012-12-08 13:40:58 UTC (rev 525) @@ -55,6 +55,8 @@ Stream(type_e type=Stream::Type_Unknown); virtual ~Stream(); + static void print_drivers(); + virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format); virtual int read(any_t* mem,int total); virtual int read(stream_packet_t * sp); @@ -238,7 +240,5 @@ SCTRL_EOF=10000 }; - - void print_stream_drivers(void); } // namespace mpxp #endif // __STREAM_H Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-08 13:27:53 UTC (rev 524) +++ mplayerxp/mplayerxp.cpp 2012-12-08 13:40:58 UTC (rev 525) @@ -634,7 +634,7 @@ void show_help(void) { // no file/vcd/dvd -> show HELP: MSG_INFO("%s",help_text); - print_stream_drivers(); + Stream::print_drivers(); MSG_INFO("\nExample: mplayerxp -ao alsa:hw:0 -vo x11 your.avi\n" "Use --long-help option for full help\n"); } @@ -643,7 +643,7 @@ MPXPSystem& MPXPSys=*mpxp_context().engine().MPXPSys; m_config_show_options(mpxp_context().mconfig); mp_input_print_binds(MPXPSys.libinput()); - print_stream_drivers(); + Stream::print_drivers(); mpxp_context().video().output->print_help(); ao_print_help(); vf_help(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-08 13:28:05
|
Revision: 524 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=524&view=rev Author: nickols_k Date: 2012-12-08 13:27:53 +0000 (Sat, 08 Dec 2012) Log Message: ----------- New classes based on struct Stream. Removed event_handler callback as meaningless Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/dump.h 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_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_stream.cpp mplayerxp/libmpdemux/parse_mp4.cpp mplayerxp/libmpdemux/yuv4mpeg.cpp mplayerxp/libmpdemux/yuv4mpeg.h mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpsub/vobsub.cpp mplayerxp/libplaytree/asxparser.cpp mplayerxp/libplaytree/playtreeparser.cpp mplayerxp/mplayerxp.cpp Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2012-12-08 09:26:17 UTC (rev 523) +++ mplayerxp/dump.cpp 2012-12-08 13:27:53 UTC (rev 524) @@ -43,8 +43,8 @@ FILE *f; const char *ext,*name; MP_UNIT("dumpstream"); - stream_reset(stream); - stream_seek(stream,stream->start_pos()); + stream->reset(); + stream->seek(stream->start_pos()); ext=".ext"; if(!port) { @@ -62,8 +62,8 @@ exit_player(MSGTR_Exit_error); } MSG_INFO("Dumping stream to %s\n",name); - while(!stream_eof(stream)){ - len=stream_read(stream,buf,4096); + while(!stream->eof()){ + len=stream->read(buf,4096); if(len>0) fwrite(buf,len,1,f); } fclose(f); @@ -92,10 +92,6 @@ libinput_t* libinput; }; -void __FASTCALL__ dump_stream_event_handler(Stream *s,const stream_packet_t*sp) -{ -} - /* returns: 0 - nothing interested -1 - quit Modified: mplayerxp/dump.h =================================================================== --- mplayerxp/dump.h 2012-12-08 09:26:17 UTC (rev 523) +++ mplayerxp/dump.h 2012-12-08 13:27:53 UTC (rev 524) @@ -10,6 +10,5 @@ void dump_mux_init(Demuxer *demuxer,libinput_t*libinput); void dump_mux(Demuxer *demuxer,int use_pts,const char *seek_to_sec,unsigned play_n_frames); void dump_mux_close(Demuxer *demuxer); - void __FASTCALL__ dump_stream_event_handler(Stream *s,const stream_packet_t*sp); } //namespace #endif Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-08 09:26:17 UTC (rev 523) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-08 13:27:53 UTC (rev 524) @@ -45,7 +45,7 @@ char buf[12]; Stream *s; s = demuxer->stream; - stream_read(s,buf,12); + s->read(buf,12); if(*((uint32_t *)&buf[0])==mmioFOURCC('F','O','R','M') && *((uint32_t *)&buf[8])==mmioFOURCC('A','I','F','F')) return MPXP_Ok; if(*((uint32_t *)&buf[0])==mmioFOURCC('F','O','R','M') && *((uint32_t *)&buf[8])==mmioFOURCC('A','I','F','C')) return MPXP_Ok; return MPXP_False; @@ -70,16 +70,16 @@ sh_audio->afmt = bps2afmt(2); w->wBitsPerSample = 8*afmt2bps(sh_audio->afmt); w->cbSize = 0; - stream_reset(s); - stream_seek(s,8); - if(stream_read(s,preamble,4)!=4) return NULL; + s->reset(); + s->seek(8); + if(s->read(preamble,4)!=4) return NULL; if(*((uint32_t *)&preamble[0])==mmioFOURCC('A','I','F','C')) priv->verc=1; demuxer->movi_start=0; while(1) { unsigned frames=0; int chunk_size; - if(stream_read(s,preamble,8)!=8) break; + if(s->read(preamble,8)!=8) break; chunk_size=be2me_32(*((uint32_t *)&preamble[4])); MSG_V("Got preamble: %c%c%c%c\n",preamble[0],preamble[1],preamble[2],preamble[3]); if(*((uint32_t *)&preamble[0])==mmioFOURCC('F','V','E','R')) @@ -89,7 +89,7 @@ MSG_V("Wrong length of VFER chunk %lu\n",be2me_32(*((uint32_t *)&preamble[4]))); return NULL; } - if(stream_read(s,preamble,4)!=4) return NULL; + if(s->read(preamble,4)!=4) return NULL; if(be2me_32(*((uint32_t *)&preamble[0])) == 0xA2805140) priv->verc=1; else { @@ -107,7 +107,7 @@ MSG_V("Invalid COMM length %u\n",chunk_size); return NULL; } - if(stream_read(s,buf,chunk_size)!=chunk_size) return NULL; + if(s->read(buf,chunk_size)!=chunk_size) return NULL; w->nChannels = sh_audio->nch = be2me_16(*((uint16_t *)&buf[0])); frames=be2me_32(*((uint32_t *)&buf[2])); w->wBitsPerSample = be2me_16(*((uint16_t *)&buf[6])); @@ -128,51 +128,51 @@ if(*((uint32_t *)&preamble[0])==mmioFOURCC('S','S','N','D') || *((uint32_t *)&preamble[0])==mmioFOURCC('A','P','C','M')) { - demuxer->movi_start=stream_tell(s)+8; + demuxer->movi_start=s->tell()+8; demuxer->movi_end=demuxer->movi_start+chunk_size; if(priv->verc && (chunk_size&1)) chunk_size++; - stream_skip(s,chunk_size); + s->skip(chunk_size); } else if(*((uint32_t *)&preamble[0])==mmioFOURCC('N','A','M','E')) { char buf[chunk_size+1]; - stream_read(s,buf,chunk_size); + s->read(buf,chunk_size); buf[chunk_size]=0; demuxer->info().add(INFOT_NAME, buf); - if(priv->verc && (chunk_size&1)) stream_read_char(s); + if(priv->verc && (chunk_size&1)) s->read_char(); } else if(*((uint32_t *)&preamble[0])==mmioFOURCC('A','U','T','H')) { char buf[chunk_size+1]; - stream_read(s,buf,chunk_size); + s->read(buf,chunk_size); buf[chunk_size]=0; demuxer->info().add(INFOT_AUTHOR, buf); - if(priv->verc && (chunk_size&1)) stream_read_char(s); + if(priv->verc && (chunk_size&1)) s->read_char(); } else if(*((uint32_t *)&preamble[0])==mmioFOURCC('(','c',')',' ')) { char buf[chunk_size+1]; - stream_read(s,buf,chunk_size); + s->read(buf,chunk_size); buf[chunk_size]=0; demuxer->info().add(INFOT_COPYRIGHT, buf); - if(priv->verc && (chunk_size&1)) stream_read_char(s); + if(priv->verc && (chunk_size&1)) s->read_char(); } else if(*((uint32_t *)&preamble[0])==mmioFOURCC('A','N','N','O')) { char buf[chunk_size+1]; - stream_read(s,buf,chunk_size); + s->read(buf,chunk_size); buf[chunk_size]=0; demuxer->info().add(INFOT_DESCRIPTION, buf); - if(priv->verc && (chunk_size&1)) stream_read_char(s); + if(priv->verc && (chunk_size&1)) s->read_char(); } else { if(priv->verc && (chunk_size&1)) chunk_size++; - stream_skip(s,chunk_size); /*unknown chunk type */ + s->skip(chunk_size); /*unknown chunk type */ } } if(!w->nAvgBytesPerSec) { MSG_V("COMM chunk not found\n"); return NULL; /* memleak here!!! */} @@ -180,16 +180,16 @@ demuxer->movi_length = (demuxer->movi_end-demuxer->movi_start)/w->nAvgBytesPerSec; demuxer->audio->sh = sh_audio; sh_audio->ds = demuxer->audio; - stream_seek(s,demuxer->movi_start); + s->seek(demuxer->movi_start); return priv; } static int aiff_demux(Demuxer* demuxer, Demuxer_Stream *ds) { 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); + off_t spos = demuxer->stream->tell(); - if(stream_eof(demuxer->stream)) + if(demuxer->stream->eof()) return 0; Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(l); @@ -197,7 +197,7 @@ dp->pos = spos; dp->flags = DP_NONKEYFRAME; - l=stream_read(demuxer->stream,dp->buffer(),l); + l=demuxer->stream->read(dp->buffer(),l); dp->resize(l); ds->add_packet(dp); @@ -209,10 +209,10 @@ sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); off_t base,pos; - base = (seeka->flags&DEMUX_SEEK_SET) ? demuxer->movi_start : stream_tell(s); + base = (seeka->flags&DEMUX_SEEK_SET) ? demuxer->movi_start : s->tell(); pos=base+(seeka->flags&DEMUX_SEEK_PERCENTS?(demuxer->movi_end - demuxer->movi_start):sh_audio->i_bps)*seeka->secs; pos -= (pos % (sh_audio->nch * afmt2bps(sh_audio->afmt))); - stream_seek(s,pos); + s->seek(pos); } static void aiff_close(Demuxer* demuxer) Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-08 09:26:17 UTC (rev 523) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-08 13:27:53 UTC (rev 524) @@ -133,7 +133,7 @@ apriv->asf_packetrate=0; apriv->asf_movielength=0; - stream_read(demuxer->stream,(char*)&apriv->asfh,sizeof(ASF_header_t)); // header obj + demuxer->stream->read((char*)&apriv->asfh,sizeof(ASF_header_t)); // header obj 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"); @@ -164,16 +164,16 @@ int best_audio = -1; asf_priv_t *apriv=static_cast<asf_priv_t*>(demuxer->priv); -while(!stream_eof(demuxer->stream)){ +while(!demuxer->stream->eof()){ int pos,endpos; - pos=stream_tell(demuxer->stream); - stream_read(demuxer->stream,(char*) &apriv->objh,sizeof(ASF_obj_header_t)); + pos=demuxer->stream->tell(); + demuxer->stream->read((char*) &apriv->objh,sizeof(ASF_obj_header_t)); le2me_ASF_obj_header_t(&apriv->objh); - if(stream_eof(demuxer->stream)) break; // EOF + if(demuxer->stream->eof()) break; // EOF endpos=pos+apriv->objh.size; switch(ASF_LOAD_GUID_PREFIX(apriv->objh.guid)){ case ASF_GUID_PREFIX_stream_header: - stream_read(demuxer->stream,(char*) &apriv->streamh,sizeof(ASF_stream_header_t)); + demuxer->stream->read((char*) &apriv->streamh,sizeof(ASF_stream_header_t)); le2me_ASF_stream_header_t(&apriv->streamh); MSG_V("stream type: %s\n" "stream concealment: %s\n" @@ -184,9 +184,9 @@ ,asf_chunk_type(apriv->streamh.concealment) ,(int)apriv->streamh.type_size,(int)apriv->streamh.stream_size,(int)apriv->streamh.stream_no ,(unsigned long)apriv->streamh.unk1,(unsigned int)apriv->streamh.unk2 - ,stream_tell(demuxer->stream)); + ,demuxer->stream->tell()); // type-specific data: - stream_read(demuxer->stream,(char*) buffer,apriv->streamh.type_size); + demuxer->stream->read((char*) buffer,apriv->streamh.type_size); switch(ASF_LOAD_GUID_PREFIX(apriv->streamh.type)){ case ASF_GUID_PREFIX_audio_stream: { sh_audio_t* sh_audio=demuxer->new_sh_audio(apriv->streamh.stream_no & 0x7F); @@ -196,7 +196,7 @@ le2me_WAVEFORMATEX(sh_audio->wf); if(mp_conf.verbose>=1) print_wave_header(sh_audio->wf,apriv->streamh.type_size); if(ASF_LOAD_GUID_PREFIX(apriv->streamh.concealment)==ASF_GUID_PREFIX_audio_conceal_interleave){ - stream_read(demuxer->stream,(char*) buffer,apriv->streamh.stream_size); + demuxer->stream->read((char*) buffer,apriv->streamh.stream_size); apriv->asf_scrambling_h=buffer[0]; apriv->asf_scrambling_w=(buffer[2]<<8)|buffer[1]; apriv->asf_scrambling_b=(buffer[4]<<8)|buffer[3]; @@ -222,7 +222,7 @@ break; // case ASF_GUID_PREFIX_header_2_0: return "guid_header_2_0"; case ASF_GUID_PREFIX_file_header: // guid_file_header - stream_read(demuxer->stream,(char*) &apriv->fileh,sizeof(ASF_file_header_t)); + demuxer->stream->read((char*) &apriv->fileh,sizeof(ASF_file_header_t)); le2me_ASF_file_header_t(&apriv->fileh); MSG_V("ASF: size: %llu play_duration: %llu send_duration: %llu packets: %d\nflags: %d min_packet_size: %d max_packet_size: %d max_bitrate: %d preroll: %d\n", (uint64_t)apriv->fileh.file_size,(uint64_t)apriv->fileh.play_duration,(uint64_t)apriv->fileh.send_duration, @@ -233,7 +233,7 @@ demuxer->movi_length=apriv->asf_movielength=apriv->fileh.send_duration/10000000LL; break; case ASF_GUID_PREFIX_data_chunk: // guid_data_chunk - demuxer->movi_start=stream_tell(demuxer->stream)+26; + demuxer->movi_start=demuxer->stream->tell()+26; demuxer->movi_end=endpos; MSG_V("Found movie at 0x%X - 0x%X\n",(int)demuxer->movi_start,(int)demuxer->movi_end); break; @@ -243,13 +243,13 @@ case ASF_GUID_PREFIX_content_desc: // Content description { char *string=NULL; - stream_read(demuxer->stream,(char*) &apriv->contenth,sizeof(ASF_content_description_t)); + demuxer->stream->read((char*) &apriv->contenth,sizeof(ASF_content_description_t)); le2me_ASF_content_description_t(&apriv->contenth); MSG_V("\n"); // extract the title if( apriv->contenth.title_size!=0 ) { string=new char[apriv->contenth.title_size]; - stream_read(demuxer->stream, string, apriv->contenth.title_size); + demuxer->stream->read( string, apriv->contenth.title_size); pack_asf_string(string, apriv->contenth.title_size); demuxer->info().add(INFOT_NAME, string); delete string; @@ -257,7 +257,7 @@ // extract the author if( apriv->contenth.author_size!=0 ) { string=new char [apriv->contenth.author_size]; - stream_read(demuxer->stream, string, apriv->contenth.author_size); + demuxer->stream->read( string, apriv->contenth.author_size); pack_asf_string(string, apriv->contenth.author_size); demuxer->info().add(INFOT_AUTHOR, string); delete string; @@ -265,7 +265,7 @@ // extract the copyright if( apriv->contenth.copyright_size!=0 ) { string=new char [apriv->contenth.copyright_size]; - stream_read(demuxer->stream, string, apriv->contenth.copyright_size); + demuxer->stream->read( string, apriv->contenth.copyright_size); pack_asf_string(string, apriv->contenth.copyright_size); demuxer->info().add(INFOT_COPYRIGHT, string); delete string; @@ -273,7 +273,7 @@ // extract the comment if( apriv->contenth.comment_size!=0 ) { string=new char [apriv->contenth.comment_size]; - stream_read(demuxer->stream, string, apriv->contenth.comment_size); + demuxer->stream->read( string, apriv->contenth.comment_size); pack_asf_string(string, apriv->contenth.comment_size); demuxer->info().add(INFOT_COMMENTS, string); delete string; @@ -281,7 +281,7 @@ // extract the rating if( apriv->contenth.rating_size!=0 ) { string=new char [apriv->contenth.rating_size]; - stream_read(demuxer->stream, string, apriv->contenth.rating_size); + demuxer->stream->read( string, apriv->contenth.rating_size); pack_asf_string(string, apriv->contenth.comment_size); demuxer->info().add(INFOT_RATING, string); delete string; @@ -295,13 +295,13 @@ char *object=NULL, *ptr=NULL; MSG_V("============ ASF Stream group == START ===\n"); MSG_V(" object size = %d\n", (int)apriv->objh.size); - object = (char*)mp_malloc(apriv->objh.size); + object = new char[apriv->objh.size]; if( object==NULL ) { MSG_ERR("Memory allocation failed\n"); delete demuxer->priv; return NULL; } - stream_read( demuxer->stream, object, apriv->objh.size ); + demuxer->stream->read(object, apriv->objh.size ); // FIXME: We need some endian handling below... ptr = object; stream_count = le2me_16(*(uint16_t*)ptr); @@ -328,7 +328,7 @@ if(ASF_LOAD_GUID_PREFIX(apriv->objh.guid)==ASF_GUID_PREFIX_data_chunk) break; // movi chunk - if(!stream_seek(demuxer->stream,endpos)) break; + if(!demuxer->stream->seek(endpos)) break; } // while EOF if(streams) { @@ -362,8 +362,8 @@ { Demuxer_Stream *d_video=demuxer->video; Demuxer_Stream *d_audio=demuxer->audio; - stream_reset(demuxer->stream); - stream_seek(demuxer->stream,demuxer->movi_start); + demuxer->stream->reset(); + demuxer->stream->seek(demuxer->movi_start); if(d_video->id != -2) { if(!d_video->fill_buffer()){ MSG_WARN("ASF: " MSGTR_MissingVideoStream); @@ -459,22 +459,22 @@ Demuxer_Packet* dp=ds->asf_packet; if(dp->length()!=unsigned(offs) && offs!=-1) MSG_V("warning! fragment.len=%d BUT next fragment offset=%d \n",dp->length(),offs); dp->resize(dp->length()+len); - stream_seek(demux->stream,dataoff); - stream_read(demux->stream,dp->buffer()+dp->length(),len); + demux->stream->seek(dataoff); + demux->stream->read(dp->buffer()+dp->length(),len); MSG_DBG3("data appended! %d+%d\n",dp->length(),len); // we are ready now. return 1; } } // create new packet: - { + { if(offs>0){ MSG_V("warning! broken fragment or incomplete seeking, %d bytes missing \n",offs); return 0; } Demuxer_Packet* dp=new(zeromem) Demuxer_Packet(len); - stream_seek(demux->stream,dataoff); - len=stream_read(demux->stream,dp->buffer(),len); + demux->stream->seek(dataoff); + len=demux->stream->read(dp->buffer(),len); dp->resize(len); dp->pts=time*0.001f; dp->flags=keyframe?DP_KEYFRAME:DP_NONKEYFRAME; @@ -499,15 +499,15 @@ int done=0; while(!done) { - demux->filepos=stream_tell(demux->stream); + demux->filepos=stream->tell(); // Broadcast stream have movi_start==movi_end // Better test ? if((demux->movi_start != demux->movi_end) && (demux->filepos>=demux->movi_end)){ - stream_set_eof(demux->stream,1); + stream->eof(1); return 0; } - if(stream_eof(demux->stream)) return 0; // EOF + if(stream->eof()) return 0; // EOF { unsigned char ecc_flags; off_t p_start,p_end; unsigned char flags; @@ -521,36 +521,36 @@ unsigned char segsizetype=0x80; int seg=-1; - p_start=stream_tell(stream); + p_start=stream->tell(); p_end = p_start+apriv->asf_packetsize; /* FIXME: parser is not ready for variable packet length */ - ecc_flags=stream_read_char(stream); /* read v82 header */ + ecc_flags=stream->read_char(); /* read v82 header */ MSG_DBG2("ecc=%02X ecc_flags=%u\n",ecc_flags,ecc_flags&0x0F); - stream_skip(stream,ecc_flags&15); - flags=stream_read_char(stream); - segtype=stream_read_char(stream); + stream->skip(ecc_flags&15); + flags=stream->read_char(); + segtype=stream->read_char(); /* Read packet size (plen): */ switch((flags>>5)&3){ - case 3: plen=stream_read_dword_le(stream);break; // dword - case 2: plen=stream_read_word_le(stream);break; // word - case 1: plen=stream_read_char(stream);break; // byte + case 3: plen=stream->read_dword_le();break; // dword + case 2: plen=stream->read_word_le();break; // word + case 1: plen=stream->read_char();break; // byte default: plen=0; /* not present */ // MSG_V("Invalid plen type! assuming plen=0 (flags=%02X)\n",flags); } /* Read sequence: */ switch((flags>>1)&3){ - case 3: sequence=stream_read_dword_le(stream);break;// dword - case 2: sequence=stream_read_word_le(stream);break; // word - case 1: sequence=stream_read_char(stream);break; // byte + case 3: sequence=stream->read_dword_le();break;// dword + case 2: sequence=stream->read_word_le();break; // word + case 1: sequence=stream->read_char();break; // byte default: sequence=0; } /* Read padding size (padding): */ switch((flags>>3)&3){ - case 3: padding=stream_read_dword_le(stream);break; // dword - case 2: padding=stream_read_word_le(stream);break; // word - case 1: padding=stream_read_char(stream);break; // byte + case 3: padding=stream->read_dword_le();break; // dword + case 2: padding=stream->read_word_le();break; // word + case 1: padding=stream->read_char();break; // byte default: padding=0; } @@ -564,12 +564,12 @@ } // Read time & duration: - time = stream_read_dword_le(stream); - duration = stream_read_word_le(stream); + time = stream->read_dword_le(); + duration = stream->read_word_le(); // Read payload flags: if(flags&1){ - unsigned char sf=stream_read_char(stream); + unsigned char sf=stream->read_char(); // multiple sub-packets segsizetype=sf>>6; segs=sf & 0x3F; @@ -589,65 +589,65 @@ unsigned int time2=0; int keyframe=0; - if(stream_tell(stream)>=p_end) MSG_V("Warning! invalid packet 1, sig11 coming soon...\n"); + if(stream->tell()>=p_end) MSG_V("Warning! invalid packet 1, sig11 coming soon...\n"); - st=stream_read_char(stream); + st=stream->read_char(); streamno=st&0x7F; if(st&0x80) keyframe=1; // Read media object number (seq): switch((segtype>>4)&3){ - case 3: seq=stream_read_dword_le(stream);break; // dword - case 2: seq=stream_read_word_le(stream);break; // word - case 1: seq=stream_read_char(stream);break; // byte + case 3: seq=stream->read_dword_le();break;// dword + case 2: seq=stream->read_word_le();break; // word + case 1: seq=stream->read_char();break; // byte default: seq=0; } // Read offset or timestamp: switch((segtype>>2)&3){ - case 3: x=stream_read_dword_le(stream);break; // dword - case 2: x=stream_read_word_le(stream);break; // word - case 1: x=stream_read_char(stream);break; // byte + case 3: x=stream->read_dword_le();break; // dword + case 2: x=stream->read_word_le();break; // word + case 1: x=stream->read_char();break; // byte default: x=0; } // Read replic.data len: switch((segtype)&3){ - case 3: rlen=stream_read_dword_le(stream);break; // dword - case 2: rlen=stream_read_word_le(stream);break; // word - case 1: rlen=stream_read_char(stream);break; // byte + case 3: rlen=stream->read_dword_le();break; // dword + case 2: rlen=stream->read_word_le();break; // word + case 1: rlen=stream->read_char();break; // byte default: rlen=0; } switch(rlen){ case 0x01: // 1 = special, means grouping - stream_skip(stream,1); // skip PTS delta + stream->skip(1); // skip PTS delta break; default: if(rlen>=8){ - stream_skip(stream,4);// skip object size - time2=stream_read_dword_le(stream); // read PTS - stream_skip(stream,rlen-8); + stream->skip(4);// skip object size + time2=stream->read_dword_le(); // read PTS + stream->skip(rlen-8); } else { MSG_V("unknown segment type (rlen): 0x%02X \n",rlen); time2=0; // unknown - stream_skip(stream,rlen); + stream->skip(rlen); } } if(flags&1){ // multiple segments switch(segsizetype){ - case 3: len=stream_read_dword_le(stream);break; // dword - case 2: len=stream_read_word_le(stream);break; // word - case 1: len=stream_read_char(stream);break; // byte - default: len=plen-(stream_tell(stream)-p_start); // ??? + case 3: len=stream->read_dword_le();break; // dword + case 2: len=stream->read_word_le();break; // word + case 1: len=stream->read_char();break; // byte + default: len=plen-(stream->tell()-p_start); // ??? } } else { // single segment - len=plen-(stream_tell(stream)-p_start); + len=plen-(stream->tell()-p_start); } - if(len<0 || (stream_tell(stream)+len)>p_end){ + if(len<0 || (stream->tell()+len)>p_end){ MSG_V("ASF_parser: warning! segment len=%d\n",len); } MSG_DBG2(" seg #%d: streamno=%d seq=%d type=%02X len=%d\n",seg,streamno,seq,rlen,len); @@ -656,9 +656,9 @@ case 0x01: // GROUPING: while(len>0){ - int len2=stream_read_char(stream); + int len2=stream->read_char(); if(len2<0) len2=0; - done=demux_asf_read_packet(demux,stream_tell(stream),len2,streamno,seq,x,duration,-1,keyframe); + done=demux_asf_read_packet(demux,stream->tell(),len2,streamno,seq,x,duration,-1,keyframe); len-=len2+1; ++seq; } @@ -669,12 +669,12 @@ default: // NO GROUPING: if(len<0) len=0; - done=demux_asf_read_packet(demux,stream_tell(stream),len,streamno,seq,time2,duration,x,keyframe); + done=demux_asf_read_packet(demux,stream->tell(),len,streamno,seq,time2,duration,x,keyframe); break; } } // for segs - stream_seek(stream,p_end); + stream->seek(p_end); if(done) return 1; // success } } @@ -697,7 +697,7 @@ off_t newpos; newpos=((seeka->flags&DEMUX_SEEK_SET)?demuxer->movi_start:demuxer->filepos)+rel_seek_bytes; if(newpos<0 || newpos<demuxer->movi_start) newpos=demuxer->movi_start; - stream_seek(demuxer->stream,newpos); + demuxer->stream->seek(newpos); /*!!! FIXME: this loop is too long sometime !!!*/ while(d_video->fill_buffer()) Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-12-08 09:26:17 UTC (rev 523) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-12-08 13:27:53 UTC (rev 524) @@ -414,15 +414,15 @@ static void find_next_mp3_hdr(Demuxer *demuxer,uint8_t *hdr) { int len; off_t spos; - while(!stream_eof(demuxer->stream)) { - spos=stream_tell(demuxer->stream); - stream_read(demuxer->stream,hdr,4); + while(!demuxer->stream->eof()) { + spos=demuxer->stream->tell(); + demuxer->stream->read(hdr,4); len = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); if(len < 0) { - stream_skip(demuxer->stream,-3); + demuxer->stream->skip(-3); continue; } - stream_seek(demuxer->stream,spos); + demuxer->stream->seek(spos); break; } } @@ -437,37 +437,37 @@ pos = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); if(pos < 0) return 0; - stream_skip(s,pos-4); - if(stream_eof(s)) + s->skip(pos-4); + if(s->eof()) return 0; - stream_read(s,hdr,4); - if(stream_eof(s)) + s->read(hdr,4); + if(s->eof()) return 0; } if(s->end_pos()) { char tag[4]; - stream_seek(s,s->end_pos()-128); - stream_read(s,tag,3); + s->seek(s->end_pos()-128); + s->read(tag,3); tag[3] = '\0'; if(strcmp(tag,"TAG")) demuxer->movi_end = s->end_pos(); else { char buf[31]; uint8_t g; - demuxer->movi_end = stream_tell(s)-3; - stream_read(s,buf,30); + demuxer->movi_end = s->tell()-3; + s->read(buf,30); buf[30] = '\0'; demuxer->info().add(INFOT_NAME,buf); - stream_read(s,buf,30); + s->read(buf,30); buf[30] = '\0'; demuxer->info().add(INFOT_AUTHOR,buf); - stream_read(s,buf,30); + s->read(buf,30); buf[30] = '\0'; demuxer->info().add(INFOT_ALBUM,buf); - stream_read(s,buf,4); + s->read(buf,4); buf[4] = '\0'; demuxer->info().add(INFOT_DATE,buf); - stream_read(s,buf,30); + s->read(buf,30); buf[30] = '\0'; demuxer->info().add(INFOT_COMMENTS,buf); if(buf[28] == 0 && buf[29] != 0) { @@ -475,7 +475,7 @@ sprintf(buf,"%d",trk); demuxer->info().add(INFOT_TRACK,buf); } - g = stream_read_char(s); + g = s->read_char(); demuxer->info().add(INFOT_GENRE,genres[g]); } } @@ -489,18 +489,18 @@ Stream *s=demuxer->stream; demuxer->movi_end = s->end_pos(); memcpy(b,hdr,4); - stream_seek(s,pos+4); - stream_read(s,&b[4],4); + s->seek(pos+4); + s->read(&b[4],4); for(n = 0; n < 5 ; n++) { MSG_DBG2("read_ac3_tags\n"); pos = ac3_decode_header(b,bitrate,samplerate,channels); if(pos < 0) return 0; - stream_skip(s,pos-8); - if(stream_eof(s)) + s->skip(pos-8); + if(s->eof()) return 0; - stream_read(s,b,8); - if(stream_eof(s)) + s->read(b,8); + if(s->eof()) return 0; } return 1; @@ -513,18 +513,18 @@ Stream *s=demuxer->stream; demuxer->movi_end = s->end_pos(); memcpy(b,hdr,4); - stream_seek(s,pos+4); - stream_read(s,&b[4],8); + s->seek(pos+4); + s->read(&b[4],8); for(n = 0; n < 5 ; n++) { MSG_DBG2("read_ddca_tags\n"); pos = ddca_decode_header(b,bitrate,samplerate,channels); if(pos < 0) return 0; - stream_skip(s,pos-12); - if(stream_eof(s)) + s->skip(pos-12); + if(s->eof()) return 0; - stream_read(s,hdr,12); - if(stream_eof(s)) + s->read(hdr,12); + if(s->eof()) return 0; } return 1; @@ -552,7 +552,7 @@ if( flags==ID3V22_ZERO_FLAG || flags==ID3V22_UNSYNCH_FLAG || flags==ID3V22_COMPRESS_FLAG) return 0; - pos=stream_tell(s); + pos=s->tell(); epos=pos+hsize; while(pos<epos) { @@ -560,10 +560,10 @@ unsigned len; unsigned char buf[ID3V22_FRAME_HEADER_SIZE]; char data[4096]; - stream_read(s,buf,ID3V22_FRAME_HEADER_SIZE); + s->read(buf,ID3V22_FRAME_HEADER_SIZE); id=(buf[2] << 16) + (buf[1] << 8) + buf[0]; len=(buf[3] << 14) + (buf[4] << 7) + buf[5]; - stream_read(s,data,std::min(len,unsigned(4096))); + s->read(data,std::min(len,unsigned(4096))); data[std::min(len,unsigned(4096))]=0; switch(id) { @@ -585,7 +585,7 @@ case 0: goto end; default: MSG_WARN("Unhandled frame: %3s\n",buf); break; } - pos=stream_tell(s); + pos=s->tell(); } end: return 1; @@ -620,11 +620,11 @@ { char buf[4]; unsigned ehsize; - stream_read(demuxer->stream,buf,4); + demuxer->stream->read(buf,4); ehsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3]; - stream_skip(demuxer->stream,ehsize); + demuxer->stream->skip(ehsize); } - pos=stream_tell(s); + pos=s->tell(); epos=pos+hsize; while(pos<epos) { @@ -632,10 +632,10 @@ unsigned len; unsigned char buf[ID3V23_FRAME_HEADER_SIZE]; char data[4096]; - stream_read(s,buf,ID3V23_FRAME_HEADER_SIZE); + s->read(buf,ID3V23_FRAME_HEADER_SIZE); id=*((uint32_t *)buf); len=(buf[4] << 21) + (buf[5] << 14) + (buf[6] << 7) + buf[7]; - stream_read(s,data,std::min(len,unsigned(4096))); + s->read(data,std::min(len,unsigned(4096))); data[std::min(len,unsigned(4096))]=0; MSG_V("ID3: %4s len %u\n",buf,len); switch(id) @@ -658,7 +658,7 @@ case 0: goto end; default: MSG_V("Unhandled frame: %4s\n",buf); break; } - pos=stream_tell(s); + pos=s->tell(); } end: return 1; @@ -696,11 +696,11 @@ { char buf[4]; unsigned ehsize; - stream_read(demuxer->stream,buf,4); + demuxer->stream->read(buf,4); ehsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3]; - stream_skip(demuxer->stream,ehsize); + demuxer->stream->skip(ehsize); } - pos=stream_tell(s); + pos=s->tell(); epos=pos+hsize; while(pos<epos) { @@ -708,10 +708,10 @@ unsigned len; unsigned char buf[ID3V23_FRAME_HEADER_SIZE]; char data[4096]; - stream_read(s,buf,ID3V23_FRAME_HEADER_SIZE); + s->read(buf,ID3V23_FRAME_HEADER_SIZE); id=*((uint32_t *)buf); len=(buf[4] << 21) + (buf[5] << 14) + (buf[6] << 7) + buf[7]; - stream_read(s,data,std::min(len,unsigned(4096))); + s->read(data,std::min(len,unsigned(4096))); data[std::min(len,unsigned(4096))]=0; MSG_V("ID3: %4s len %u\n",buf,len); switch(id) @@ -735,7 +735,7 @@ case 0: goto end; default: MSG_V("Unhandled frame: %4s\n",buf); break; } - pos=stream_tell(s); + pos=s->tell(); } end: return 1; @@ -746,11 +746,11 @@ char buf[4]; Stream* s=demuxer->stream; unsigned vers,rev,flags,hsize; - stream_seek(s,3); /* skip 'ID3' */ - vers=stream_read_char(s); - rev=stream_read_char(s); - flags=stream_read_char(s); - stream_read(s,buf,4); + s->seek(3); /* skip 'ID3' */ + vers=s->read_char(); + rev=s->read_char(); + flags=s->read_char(); + s->read(buf,4); hsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3]; MSG_V("Found ID3v2.%d.%d flags %d size %d\n",vers,rev,flags,hsize); if(vers==2) return read_id3v22_tags(demuxer,flags,hsize); @@ -770,12 +770,12 @@ Stream *s; *brate=*samplerate=*channels=0; s = demuxer->stream; - stream_seek(s,fptr); - fcc=fcc1=stream_read_dword(s); + s->seek(fptr); + fcc=fcc1=s->read_dword(); fcc1=me2be_32(fcc1); p = (uint8_t *)&fcc1; - stream_seek(s,fptr); - stream_read(s,b,sizeof(b)); + s->seek(fptr); + s->read(b,sizeof(b)); if(p[0] == 'M' && p[1] == 'P' && p[2] == '+' && (p[3] >= 4 && p[3] <= 0x20)) retval = RAW_MUSEPACK; else if(fcc1 == mmioFOURCC('f','L','a','C')) retval = RAW_FLAC; @@ -796,7 +796,7 @@ if(ddca_decode_header(b,samplerate,brate,channels)>0) retval = RAW_DCA; else if(memcmp(b,"Creative Voice File\x1A",20)==0) retval = RAW_VOC; - stream_seek(s,fptr); + s->seek(fptr); return retval; } @@ -806,13 +806,13 @@ Stream *s; uint8_t *p; s = demuxer->stream; - fcc1=stream_read_dword(s); + fcc1=s->read_dword(); fcc1=me2be_32(fcc1); p = (uint8_t *)&fcc1; if(fcc1 == mmioFOURCC('R','I','F','F')) { - stream_skip(s,4); - fcc2 = stream_read_fourcc(s); + s->skip(4); + fcc2 = s->read_fourcc(); if(fcc2 == mmioFOURCC('W','A','V','E')) return MPXP_Ok; } else @@ -842,24 +842,24 @@ mode = (hdr[3]>>6)&3; if(mpeg1) off=mode!=MPG_MD_MONO?32:17; else off=mode!=MPG_MD_MONO?17:9;/* mpeg2 */ - fpos = stream_tell(s); - stream_skip(s,off); - stream_read(s,buf,4); + fpos = s->tell(); + s->skip(off); + s->read(buf,4); if(memcmp(buf,"Xing",4) == 0 || memcmp(buf,"Info",4) == 0) { priv->is_xing=1; priv->lsf=mpeg1?0:1; priv->srate=sr_table[sr_index&0x3]; - head_flags = stream_read_dword(s); - if(head_flags & FRAMES_FLAG) priv->nframes=stream_read_dword(s); - if(head_flags & BYTES_FLAG) priv->nbytes=stream_read_dword(s); - if(head_flags & TOC_FLAG) stream_read(s,priv->toc,100); - if(head_flags & VBR_SCALE_FLAG) priv->scale = stream_read_dword(s); + head_flags = s->read_dword(); + if(head_flags & FRAMES_FLAG) priv->nframes=s->read_dword(); + if(head_flags & BYTES_FLAG) priv->nbytes=s->read_dword(); + if(head_flags & TOC_FLAG) s->read(priv->toc,100); + if(head_flags & VBR_SCALE_FLAG) priv->scale = s->read_dword(); MSG_DBG2("Found Xing VBR header: flags=%08X nframes=%u nbytes=%u scale=%i srate=%u\n" ,head_flags,priv->nframes,priv->nbytes,priv->scale,priv->srate); - stream_seek(s,fpos); + s->seek(fpos); } - else stream_seek(s,fpos); + else s->seek(fpos); } extern const demuxer_driver_t demux_audio; @@ -881,15 +881,15 @@ priv = new(zeromem) da_priv_t; s = demuxer->stream; - stream_reset(s); - stream_seek(s,s->start_pos()); - while(n < 5 && !stream_eof(s)) + s->reset(); + s->seek(s->start_pos()); + while(n < 5 && !s->eof()) { - st_pos = stream_tell(s); + st_pos = s->tell(); step = 1; if(pos < HDR_SIZE) { - stream_read(s,&hdr[pos],HDR_SIZE-pos); + s->read(&hdr[pos],HDR_SIZE-pos); pos = HDR_SIZE; } @@ -899,25 +899,25 @@ if(fcc == mmioFOURCC('R','I','F','F')) { MSG_DBG2("Found RIFF\n"); - stream_skip(s,4); - if(stream_eof(s)) break; - stream_read(s,hdr,4); - if(stream_eof(s)) break; + s->skip(4); + if(s->eof()) break; + s->read(hdr,4); + if(s->eof()) break; fcc2 = le2me_32(*(uint32_t *)hdr); pfcc= (const unsigned char *)&fcc2; MSG_DBG2("RIFF fcc=%c%c%c%c\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); - if(fcc2!=mmioFOURCC('W','A','V','E')) stream_skip(s,-8); + if(fcc2!=mmioFOURCC('W','A','V','E')) s->skip(-8); else { /* We found wav header. Now we should find 'fmt '*/ off_t fpos; - fpos=stream_tell(s); + fpos=s->tell(); MSG_DBG2("RIFF WAVE found. Start detection from %llu\n",fpos); step = 4; while(1) { unsigned chunk_len; - fcc=stream_read_fourcc(s); + fcc=s->read_fourcc(); pfcc= (const unsigned char *)&fcc; MSG_DBG2("fmt fcc=%c%c%c%c\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); if(fcc==mmioFOURCC('f','m','t',' ')) @@ -926,12 +926,12 @@ frmt = RAW_WAV; break; } - if(stream_eof(s)) break; - chunk_len=stream_read_dword_le(s); - stream_skip(s,chunk_len); + if(s->eof()) break; + chunk_len=s->read_dword_le(); + s->skip(chunk_len); } MSG_DBG2("Restore stream pos %llu\n",fpos); - stream_seek(s,fpos); + s->seek(fpos); if(frmt==RAW_WAV) break; } } @@ -939,11 +939,11 @@ if( hdr[0] == 'I' && hdr[1] == 'D' && hdr[2] == '3' && (hdr[3] >= 2)) { unsigned len,fmt; - stream_skip(s,2); - stream_read(s,hdr,4); + s->skip(2); + s->read(hdr,4); len = (hdr[0]<<21) | (hdr[1]<<14) | (hdr[2]<<7) | hdr[3]; read_id3v2_tags(demuxer); - stream_seek(s,len+10); + s->seek(len+10); find_next_mp3_hdr(demuxer,hdr); Xing_test(s,hdr,priv); mp_decode_mp3_header(hdr,&fmt,&mp3_brate,&mp3_samplerate,&mp3_channels); @@ -982,7 +982,7 @@ break; } memcpy(b,hdr,HDR_SIZE); - stream_read(s,&b[HDR_SIZE],12-HDR_SIZE); + s->read(&b[HDR_SIZE],12-HDR_SIZE); if((n = ac3_decode_header(b,&fmt,&fmt,&fmt)) > 0) { demuxer->movi_start = st_pos; @@ -1013,7 +1013,7 @@ } sh_audio = demuxer->new_sh_audio(); MSG_DBG2("mp3_header off: st_pos=%lu n=%lu HDR_SIZE=%u\n",st_pos,n,HDR_SIZE); - demuxer->movi_start = stream_tell(s); + demuxer->movi_start = s->tell(); demuxer->movi_end = s->end_pos(); switch(frmt) { case RAW_FLAC: @@ -1024,7 +1024,7 @@ /* loop through the metadata blocks; use a do-while construct since there * will always be 1 metadata block */ do { - if(stream_read(s,chunk,4)!=4) return NULL; + if(s->read(chunk,4)!=4) return NULL; block_size=(chunk[1]<<16)|(chunk[2]<<8)|chunk[3]; switch (chunk[0] & 0x7F) { /* STREAMINFO */ @@ -1039,7 +1039,7 @@ MSG_V("expected STREAMINFO chunk of %d bytes\n",block_size); return 0; } - if(stream_read(s,sinfo,block_size)!=(int)block_size) return NULL; + if(s->read(sinfo,block_size)!=(int)block_size) return NULL; sh_audio->rate=be2me_32(*(uint32_t *)&sinfo[10]); sh_audio->nch=w->nChannels=((sh_audio->rate>>9)&0x07)+1; w->wBitsPerSample=((sh_audio->rate>>4)&0x1F)+1; @@ -1069,12 +1069,12 @@ /* APPLICATION */ case 2: MSG_V("metadata %i size %u\n",chunk[0] & 0x7F,block_size); - stream_skip(s,block_size); + s->skip(block_size); break; } } while ((chunk[0] & 0x80) == 0); /* We have reached 1st FRAME_HEADER here. */ - demuxer->movi_start = 0;//stream_tell(s); (ffmpeg.flac requires STREAM_HEADER to be proceed too!!!) + demuxer->movi_start = 0;//s->tell(); (ffmpeg.flac requires STREAM_HEADER to be proceed too!!!) demuxer->movi_end += demuxer->movi_start; break; } @@ -1083,9 +1083,9 @@ uint32_t id; WAVEFORMATEX* w; sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); - hsize=stream_read_dword(s); - dsize=stream_read_dword(s); - id = stream_read_dword(s); + hsize=s->read_dword(); + dsize=s->read_dword(); + id = s->read_dword(); sh_audio->afmt=bps2afmt(2); if(id == 1) id = WAVE_FORMAT_MULAW; else @@ -1095,8 +1095,8 @@ w->wFormatTag = sh_audio->wtag = id; /* Trickly mplayerxp will threat 'raw ' as big-endian */ if(id == 0x1) sh_audio->wtag=mmioFOURCC('r','a','w',' '); - w->nSamplesPerSec = sh_audio->rate = stream_read_dword(s); - w->nChannels = sh_audio->nch = stream_read_dword(s); + w->nSamplesPerSec = sh_audio->rate = s->read_dword(); + w->nChannels = sh_audio->nch = s->read_dword(); w->nAvgBytesPerSec = sh_audio->rate*afmt2bps(sh_audio->afmt)*sh_audio->nch; w->nBlockAlign = sh_audio->nch*afmt2bps(sh_audio->afmt); w->wBitsPerSample = 8*afmt2bps(sh_audio->afmt); @@ -1138,10 +1138,10 @@ uint32_t frames; unsigned char bt; sh_audio->wtag = mmioFOURCC('M','P','C',' '); - stream_seek(s,4); - frames = stream_read_dword(s); - stream_skip(s,2); - bt=stream_read_char(s); + s->seek(4); + frames = s->read_dword(); + s->skip(2); + bt=s->read_char(); sh_audio->wf = (WAVEFORMATEX *)mp_malloc(sizeof(WAVEFORMATEX)); sh_audio->wf->wFormatTag = sh_audio->wtag; sh_audio->wf->nChannels = 2; @@ -1171,17 +1171,17 @@ char chunk[4]; unsigned size; WAVEFORMATEX* w; - stream_seek(s,0x14); - stream_read(s,chunk,2); + s->seek(0x14); + s->read(chunk,2); size=le2me_16(*reinterpret_cast<uint16_t*>(&chunk[0])); - stream_seek(s,size); - stream_read(s,chunk,4); + s->seek(size); + s->read(chunk,4); if(chunk[0]!=0x01) { MSG_V("VOC unknown block type %02X\n",chunk[0]); return NULL; } size=chunk[1]|(chunk[2]<<8)|(chunk[3]<<16); sh_audio->wtag = 0x01; /* PCM */ - stream_read(s,chunk,2); + s->read(chunk,2); if(chunk[1]!=0) { MSG_V("VOC unknown compression type %02X\n",chunk[1]); return NULL; } - demuxer->movi_start=stream_tell(s); + demuxer->movi_start=s->tell(); demuxer->movi_end=demuxer->movi_start+size; sh_audio->rate=256-(1000000/chunk[0]); sh_audio->nch=1; @@ -1205,9 +1205,9 @@ sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); do { - chunk_type = stream_read_fourcc(s); - chunk_size = stream_read_dword_le(s); - fpos=stream_tell(s); + chunk_type = s->read_fourcc(); + chunk_size = s->read_dword_le(); + fpos=s->tell(); switch(chunk_type) { case mmioFOURCC('f','m','t',' '): @@ -1219,29 +1219,29 @@ delete sh_audio; return NULL; } - w->wFormatTag = sh_audio->wtag = stream_read_word_le(s); - w->nChannels = sh_audio->nch = stream_read_word_le(s); - w->nSamplesPerSec = sh_audio->rate = stream_read_dword_le(s); - w->nAvgBytesPerSec = stream_read_dword_le(s); - w->nBlockAlign = stream_read_word_le(s); - w->wBitsPerSample = stream_read_word_le(s); + w->wFormatTag = sh_audio->wtag = s->read_word_le(); + w->nChannels = sh_audio->nch = s->read_word_le(); + w->nSamplesPerSec = sh_audio->rate = s->read_dword_le(); + w->nAvgBytesPerSec = s->read_dword_le(); + w->nBlockAlign = s->read_word_le(); + w->wBitsPerSample = s->read_word_le(); sh_audio->afmt = bps2afmt((w->wBitsPerSample+7)/8); w->cbSize = 0; l -= 16; - if(l) stream_skip(s,l); + if(l) s->skip(l); } break; case mmioFOURCC('d', 'a', 't', 'a'): MSG_DBG2("Found data chunk at %llu\n",fpos); data_off=fpos; - stream_skip(s,chunk_size); + s->skip(chunk_size); break; case mmioFOURCC('l', 'i', 's', 't'): { uint32_t cfcc; MSG_DBG2("RIFF 'list' found\n"); - cfcc=stream_read_fourcc(s); - if(cfcc!=mmioFOURCC('a', 'd', 't', 'l')) { stream_seek(s,fpos); break; } + cfcc=s->read_fourcc(); + if(cfcc!=mmioFOURCC('a', 'd', 't', 'l')) { s->seek(fpos); break; } do { unsigned int subchunk_type; @@ -1250,16 +1250,16 @@ unsigned slen,rlen; char note[256]; MSG_DBG2("RIFF 'list' accepted\n"); - subchunk_type = stream_read_fourcc(s); - subchunk_size = stream_read_dword_le(s); - subchunk_id = stream_read_dword_le(s); + subchunk_type = s->read_fourcc(); + subchunk_size = s->read_dword_le(); + subchunk_id = s->read_dword_le(); if(subchunk_type==mmioFOURCC('l','a','b','l')) { slen=subchunk_size-4; rlen=std::min(sizeof(note),size_t(slen)); - stream_read(s,note,rlen); + s->read(note,rlen); note[rlen]=0; - if(slen>rlen) stream_skip(s,slen-rlen); + if(slen>rlen) s->skip(slen-rlen); demuxer->info().add(INFOT_NAME,note); MSG_DBG2("RIFF 'labl' %u %s accepted\n",slen,note); } @@ -1268,31 +1268,31 @@ { slen=subchunk_size-4; rlen=std::min(sizeof(note),size_t(slen)); - stream_read(s,note,rlen); + s->read(note,rlen); note[rlen]=0; - if(slen>rlen) stream_skip(s,slen-rlen); + if(slen>rlen) s->skip(slen-rlen); demuxer->info().add(INFOT_COMMENTS,note); MSG_DBG2("RIFF 'note' %u %s accepted\n",slen,note); } - else stream_skip(s,subchunk_size); - }while(stream_tell(s)<fpos+chunk_size); - stream_seek(s,fpos+chunk_size); + else s->skip(subchunk_size); + }while(s->tell()<fpos+chunk_size); + s->seek(fpos+chunk_size); } break; default: - stream_skip(s, chunk_size); + s->skip( chunk_size); pfcc=(unsigned char *)&chunk_type; MSG_DBG2("RIFF unhandled '%c%c%c%c' chunk skipped\n",pfcc[0],pfcc[1],pfcc[2],pfcc[3]); break; } - } while (!stream_eof(s)); + } while (!s->eof()); if(data_off==-1) { MSG_ERR("RIFF WAVE - no 'data' chunk found\n"); return NULL; } - stream_seek(s,data_off); - demuxer->movi_start = stream_tell(s); + s->seek(data_off); + demuxer->movi_start = s->tell(); if(w->wFormatTag==0x01) /* PCM */ { int raw_id; @@ -1307,9 +1307,9 @@ case RAW_SND_AU: { unsigned hsize,dsize; uint32_t id; - hsize=stream_read_dword(s); - dsize=stream_read_dword(s); - id = stream_read_dword(s); + hsize=s->read_dword(); + dsize=s->read_dword(); + id = s->read_dword(); if(id == 1) id = WAVE_FORMAT_MULAW; else if(id == 27) id=WAVE_FORMAT_ALAW; @@ -1333,18 +1333,18 @@ if(samplerate) w->nSamplesPerSec = sh_audio->rate = samplerate; } } - stream_seek(s,data_off); + s->seek(data_off); /* id3v1 tags may exist within WAV */ if(sh_audio->wtag==0x50 || sh_audio->wtag==0x55) { - stream_seek(s,data_off); - stream_read(s,hdr,4); + s->seek(data_off); + s->read(hdr,4); MSG_DBG2("Trying id3v1 at %llX\n",data_off); if(!read_mp3v1_tags(demuxer,hdr,data_off)) demuxer->movi_end = s->end_pos(); } else demuxer->movi_end = s->end_pos(); - stream_seek(s,data_off); + s->seek(data_off); } break; } @@ -1366,8 +1366,8 @@ MSG_DBG2("stream length by xing header=%u secs\n",demuxer->movi_length); } MSG_V("demux_audio: audio data 0x%llX - 0x%llX \n",demuxer->movi_start,demuxer->movi_end); - if(stream_tell(s) != demuxer->movi_start) - stream_seek(s,demuxer->movi_start); + if(s->tell() != demuxer->movi_start) + s->seek(demuxer->movi_start); if(mp_conf.verbose && sh_audio->wf) print_wave_header(sh_audio->wf,sizeof(WAVEFORMATEX)); 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); @@ -1383,7 +1383,7 @@ out >>= (32 - priv->pos); } else { - stream_read(s, (any_t*)&priv->dword, 4); + s->read( (any_t*)&priv->dword, 4); priv->dword = le2me_32(priv->dword); priv->pos -= 32; if (priv->pos) { @@ -1410,13 +1410,13 @@ priv = static_cast<da_priv_t*>(demux->priv); s = demux->stream; - seof=stream_eof(s); - if(seof || (demux->movi_end && stream_tell(s) >= demux->movi_end)) { + seof=s->eof(); + if(seof || (demux->movi_end && s->tell() >= demux->movi_end)) { MSG_DBG2("audio_demux: EOF due: %s\n", - seof?"stream_eof(s)":"stream_tell(s) >= demux->movi_end"); + seof?"s->eof()":"s->tell() >= demux->movi_end"); if(!seof) { MSG_DBG2("audio_demux: stream_pos=%llu movi_end=%llu\n", - stream_tell(s), + s->tell(), demux->movi_end); } return 0; @@ -1437,88 +1437,88 @@ case RAW_MP1: case RAW_MP2: case RAW_MP3: - while(!stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) { + while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { uint8_t hdr[4]; int len; - stream_read(s,hdr,4); + s->read(hdr,4); MSG_DBG2("audio_fillbuffer\n"); len = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); - if(stream_eof(s)) return 0; /* workaround for dead-lock (skip(-3)) below */ + if(s->eof()) return 0; /* workaround for dead-lock (skip(-3)) below */ if(len < 0) { - stream_skip(s,-3); + s->skip(-3); } else { - if(stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) + if(s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) return 0; if(len>4) { Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len); memcpy(dp->buffer(),hdr,4); dp->resize(len+4); - len=stream_read(s,dp->buffer() + 4,len-4); + len=s->read(dp->buffer() + 4,len-4); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; ds->add_packet(dp); } - else stream_skip(s,len); + else s->skip(len); return 1; } } break; case RAW_AC3: - while(!stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) { + while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { uint8_t hdr[8]; int len; unsigned dummy; - stream_read(s,hdr,8); + s->read(hdr,8); len = ac3_decode_header(hdr,&dummy,&dummy,&dummy); MSG_DBG2("audio_fillbuffer %u bytes\n",len); - if(stream_eof(s)) return 0; /* workaround for dead-lock (skip(-7)) below */ + if(s->eof()) return 0; /* workaround for dead-lock (skip(-7)) below */ if(len < 0) { - stream_skip(s,-7); + s->skip(-7); } else { - if(stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) + if(s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) return 0; if(len>8) { Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len); memcpy(dp->buffer(),hdr,8); dp->resize(len+8); - len=stream_read(s,dp->buffer()+8,len-8); + len=s->read(dp->buffer()+8,len-8); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; ds->add_packet(dp); } - else stream_skip(s,len); + else s->skip(len); return 1; } } break; case RAW_DCA: - while(!stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) { + while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) { uint8_t hdr[16]; int len; unsigned dummy; - stream_read(s,hdr,16); + s->read(hdr,16); len = ddca_decode_header(hdr,&dummy,&dummy,&dummy); MSG_DBG2("audio_fillbuffer %u bytes\n",len); - if(stream_eof(s)) return 0; /* workaround for dead-lock (skip(-7)) below */ + if(s->eof()) return 0; /* workaround for dead-lock (skip(-7)) below */ if(len < 0) { - stream_skip(s,-15); + s->skip(-15); } else { - if(stream_eof(s) || (demux->movi_end && stream_tell(s) >= demux->movi_end) ) + if(s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) return 0; if(len>16) { Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len); dp->resize(len+16); memcpy(dp->buffer(),hdr,16); - len=stream_read(s,dp->buffer()+16,len-16); + len=s->read(dp->buffer()+16,len-16); priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + len/(float)sh_audio->i_bps; dp->pts = priv->last_pts - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; dp->flags=DP_NONKEYFRAME; ds->add_packet(dp); } - else stream_skip(s,len); + else s->skip(len); return 1; } } break; @@ -1527,7 +1527,7 @@ case RAW_WAV : { int l = sh_audio->wf->nAvgBytesPerSec; Demuxer_Packet* dp =new(zeromem) Demuxer_Packet(l); - l=stream_read(s,dp->buffer(),l); + l=s->read(dp->buffer(),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 - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; @@ -1538,7 +1538,7 @@ case RAW_VOC : { int l = 65536; Demuxer_Packet* dp =new(zeromem) Demuxer_Packet(l); - l=stream_read(s,dp->buffer(),l); + l=s->read(dp->buffer(),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 - (demux->audio->tell_pts()-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps; @@ -1585,14 +1585,14 @@ nf = _time*sh->rate/1152; while(nf > 0) { - stream_read(demuxer->stream,hdr,4); + demuxer->stream->read(hdr,4); MSG_DBG2("high_res_mp3_seek\n"); len = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); if(len < 0) { - stream_skip(demuxer->stream,-3); + demuxer->stream->skip(-3); continue; } - stream_skip(demuxer->stream,len-4); + demuxer->stream->skip(len-4); priv->last_pts += 1152/(float)sh->rate; nf--; } @@ -1607,14 +1607,14 @@ nf = _time*sh->rate/1152; while(nf > 0) { - stream_read(demuxer->stream,hdr,8); + demuxer->stream->read(hdr,8); MSG_DBG2("high_res_mp3_seek\n"); len = ac3_decode_header(hdr,&tmp,&tmp,&tmp); if(len < 0) { - stream_skip(demuxer->stream,-7); + demuxer->stream->skip(-7); continue; } - stream_skip(demuxer->stream,len-8); + demuxer->stream->skip(len-8); priv->last_pts += 1152/(float)sh->rate; nf--; } @@ -1629,14 +1629,14 @@ nf = _time*sh->rate/1152; while(nf > 0) { - stream_read(demuxer->stream,hdr,12); + demuxer->stream->read(hdr,12); MSG_DBG2("high_res_ddca_seek\n"); len = ddca_decode_header(hdr,&tmp,&tmp,&tmp); if(len < 0) { - stream_skip(demuxer->stream,-11); + demuxer->stream->skip(-11); continue; } - stream_skip(demuxer->stream,len-12); + demuxer->stream->skip(len-12); priv->last_pts += 1152/(float)sh->rate; nf--; } @@ -1659,7 +1659,7 @@ if (seeka->flags & DEMUX_SEEK_PERCENTS) target *= priv->length; if (!(seeka->flags & DEMUX_SEEK_SET)) target += priv->last_pts; if (target < priv->last_pts) { - stream_seek(s, demuxer->movi_start); + s->seek( demuxer->movi_start); priv->pos = 32; // empty bit buffer mpc_get_bits(priv, s, 8); // discard first 8 bits priv->last_pts = 0; @@ -1667,7 +1667,7 @@ while (target > priv->last_pts) { int bit_len = mpc_get_bits(priv, s, 20); if (bit_len > 32) { - stream_skip(s, bit_len / 32 * 4 - 4); + s->skip( bit_len / 32 * 4 - 4); mpc_get_bits(priv, s, 32); // make sure dword is reloaded } mpc_get_bits(priv, s, bit_len % 32); @@ -1682,20 +1682,20 @@ unsigned percents,cpercents,npercents; off_t newpos,spos; percents = (unsigned)(seeka->secs*100.)/(float)demuxer->movi_length; - spos=stream_tell(demuxer->stream); + spos=demuxer->stream->tell(); cpercents=(unsigned)((float)spos*100./(float)priv->nbytes); npercents=(seeka->flags&DEMUX_SEEK_SET)?percents:cpercents+percents; if(npercents>100) npercents=100; newpos=demuxer->movi_start+(off_t)(((float)priv->toc[npercents]/256.0)*priv->nbytes); MSG_DBG2("xing seeking: secs=%f prcnts=%u cprcnts=%u spos=%llu newpos=%llu\n",seeka->secs,npercents,cpercents,spos,newpos); - stream_seek(demuxer->stream,newpos); + demuxer->stream->seek(newpos); priv->last_pts=(((float)demuxer->movi_length*npercents)/100.)*1000.; return; } if((priv->frmt == RAW_MP3 || priv->frmt == RAW_MP2 || priv->frmt == RAW_MP1) && hr_mp3_seek && !(seeka->flags & DEMUX_SEEK_PERCENTS)) { len = (seeka->flags & DEMUX_SEEK_SET) ? seeka->secs - priv->last_pts : seeka->secs; if(len < 0) { - stream_seek(s,demuxer->movi_start); + s->seek(demuxer->movi_start); len = priv->last_pts + len; priv->last_pts = 0; } @@ -1705,11 +1705,11 @@ return; } - base = seeka->flags&DEMUX_SEEK_SET ? demuxer->movi_start : stream_tell(s); + base = seeka->flags&DEMUX_SEEK_SET ? demuxer->movi_start : s->tell(); pos=base+(seeka->flags&DEMUX_SEEK_PERCENTS?(demuxer->movi_end - demuxer->movi_start):sh_audio->i_bps)*seeka->secs; if(demuxer->movi_end && pos >= demuxer->movi_end) { - sh_audio->timer = (stream_tell(s) - demuxer->movi_start)/(float)sh_audio->i_bps; + sh_audio->timer = (s->tell() - demuxer->movi_start)/(float)sh_audio->i_bps; return; } else if(pos < demuxer->movi_start) pos = demuxer->movi_start; @@ -1731,7 +1731,7 @@ case RAW_AC3: { len = (seeka->flags & DEMUX_SEEK_SET) ? seeka->secs - priv->last_pts : seeka->secs; if(len < 0) { - stream_seek(s,demuxer->movi_start); + s->seek(demuxer->movi_start); len = priv->last_pts + len; priv->last_pts = 0; } @@ -1743,7 +1743,7 @@ case RAW_DCA: { len = (seeka->flags & DEMUX_SEEK_SET) ? seeka->secs - priv->last_pts : seeka->secs; if(len < 0) { - stream_seek(s,demuxer->movi_start); + s->seek(demuxer->movi_start); len = priv->last_pts + len; priv->last_pts = 0; } @@ -1761,7 +1761,7 @@ priv->last_pts -= sh_audio->wf->nAvgBytesPerSec/(float)sh_audio->i_bps; break; } - stream_seek(s,pos); + s->seek(pos); } static void audio_close(Demuxer* demuxer) { Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-08 09:26:17 UTC (rev 523) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-08 13:27:53 UTC (rev 524) @@ -133,21 +133,21 @@ priv->idx_size=0; priv->audio_streams=0; while(1){ - int id=stream_read_dword_le(demuxer->stream); + int id=demuxer->stream->read_dword_le(); unsigned chunksize,size2; static int last_fccType=0; const char* hdr=NULL; int infot; // - if(stream_eof(demuxer->stream)) break; + if(demuxer->stream->eof()) break; // if(id==mmioFOURCC('L','I','S','T')){ - unsigned len=stream_read_dword_le(demuxer->stream); // list size - id=stream_read_dword_le(demuxer->stream); // list type + unsigned len=demuxer->stream->read_dword_le(); // list size + id=demuxer->stream->read_dword_le(); // list type MSG_DBG2("LIST %.4s len=%u\n",(char *) &id,len); if(len >= 4) { len -= 4; - list_end=stream_tell(demuxer->stream)+((len+1)&(~1)); + list_end=demuxer->stream->tell()+((len+1)&(~1)); } else { MSG_WARN("** empty list?!\n"); list_end = 0; @@ -155,18 +155,18 @@ MSG_DBG2("list_end=0x%X\n",(int)list_end); if(id==listtypeAVIMOVIE){ // found MOVI header - if(!demuxer->movi_start) demuxer->movi_start=stream_tell(demuxer->stream); - demuxer->movi_end=stream_tell(demuxer->stream)+len; + if(!demuxer->movi_start) demuxer->movi_start=demuxer->stream->tell(); + demuxer->movi_end=demuxer->stream->tell()+len; MSG_V("Found movie at 0x%X - 0x%X\n",(int)demuxer->movi_start,(int)demuxer->movi_end); if(demuxer->stream->end_pos()>demuxer->movi_end) demuxer->movi_end=demuxer->stream->end_pos(); if(index_mode==-2 || index_mode==2 || index_mode==0) break; // reading from non-seekable source (stdin) or forced index or no index forced - if(list_end>0) stream_seek(demuxer->stream,list_end); // skip movi + if(list_end>0) demuxer->stream->seek(list_end); // skip movi list_end=0; } continue; } - size2=stream_read_dword_le(demuxer->stream); + size2=demuxer->stream->read_dword_le(); MSG_V("CHUNK %.4s len=%u\n",(char *) &id,size2); chunksize=(size2+1)&(~1); infot=-1; @@ -250,7 +250,7 @@ case mmioFOURCC('I','D','I','T'): hdr="Digitization Time";break; case ckidAVIMAINHDR: // read 'avih' - stream_read(demuxer->stream,(char*) &avih,std::min((unsigned long)size2,sizeof(avih))); + demuxer->stream->read((char*) &avih,std::min((unsigned long)size2,sizeof(avih))); le2me_MainAVIHeader(&avih); // swap to machine endian chunksize-=std::min((unsigned long)size2,sizeof(avih)); demuxer->movi_length=avih.dwTotalFrames; @@ -258,7 +258,7 @@ break; case ckidSTREAMHEADER: { // read 'strh' AVIStreamHeader h; - stream_read(demuxer->stream,(char*) &h,std::min((unsigned long)size2,sizeof(h))); + demuxer->stream->read((char*) &h,std::min((unsigned long)size2,sizeof(h))); le2me_AVIStreamHeader(&h); // swap to machine endian chunksize-=std::min((unsigned long)size2,sizeof(h)); ++stream_id; @@ -290,12 +290,12 @@ chunksize-=24; memcpy(s->fcc, "indx", 4); s->dwSize = size2; - s->wLongsPe... [truncated message content] |
From: <nic...@us...> - 2012-12-08 09:26:23
|
Revision: 523 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=523&view=rev Author: nickols_k Date: 2012-12-08 09:26:17 +0000 (Sat, 08 Dec 2012) Log Message: ----------- security patch: make struct Stream independed from Demuxer_Stream* Modified Paths: -------------- mplayerxp/libmpdemux/demuxer.h mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-12-08 09:17:54 UTC (rev 522) +++ mplayerxp/libmpdemux/demuxer.h 2012-12-08 09:26:17 UTC (rev 523) @@ -152,8 +152,6 @@ 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))); } - // This is defined here because demux_stream_t ins't defined in stream.h - Stream* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds); Demuxer* new_demuxers_demuxer(Demuxer* vd, Demuxer* ad, Demuxer* sd); }// namespace mpxp #endif Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-08 09:17:54 UTC (rev 522) +++ mplayerxp/libmpstream/stream.cpp 2012-12-08 09:26:17 UTC (rev 523) @@ -98,12 +98,6 @@ reset(); } -Stream::Stream(Demuxer_Stream* ds) { - _type=Stream::Type_DS; - driver=ds->demuxer->stream->driver; - priv = ds; -} - Stream::~Stream(){ MSG_INFO("\n*** free_stream(drv:%s) called [errno: %s]***\n",driver_info->mrl,strerror(errno)); if(driver) close(); Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-08 09:17:54 UTC (rev 522) +++ mplayerxp/libmpstream/stream.h 2012-12-08 09:26:17 UTC (rev 523) @@ -39,7 +39,6 @@ }; struct cache_vars_s; - class Demuxer_Stream; class Stream_Interface; struct stream_interface_info_t; /** Stream description */ @@ -58,7 +57,6 @@ Type_Menu =0x00000100, /**< Stream contains DVD menu... */ }; Stream(type_e type=Stream::Type_Unknown); - Stream(Demuxer_Stream* ds); virtual ~Stream(); virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format,stream_callback event_handler); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-08 09:18:01
|
Revision: 522 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=522&view=rev Author: nickols_k Date: 2012-12-08 09:17:54 +0000 (Sat, 08 Dec 2012) Log Message: ----------- security patch: more private data for struct Stream and make it independed from Demuxer* and networking_t* Modified Paths: -------------- mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_rawaudio.cpp mplayerxp/libmpdemux/demux_rawvideo.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/mplayerxp.cpp Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -333,14 +333,6 @@ if(streams) { uint32_t vr = 0, ar = 0,i; -#ifdef HAVE_STREAMING - if( demuxer->stream->networking!=NULL ) { - if( demuxer->stream->networking->bandwidth!=0 && demuxer->stream->networking->data!=NULL ) { - best_audio = ((asf_http_networking_t*)demuxer->stream->networking->data)->audio_id; - best_video = ((asf_http_networking_t*)demuxer->stream->networking->data)->video_id; - } - } else -#endif for(i = 0; i < stream_count; i++) { uint32_t id = streams[2*i]; uint32_t rate = streams[2*i+1]; Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -48,10 +48,10 @@ sh_audio_t* sh_audio; WAVEFORMATEX* w; - stream_control(demuxer->stream,SCTRL_AUD_GET_CHANNELS,&channels); - stream_control(demuxer->stream,SCTRL_AUD_GET_SAMPLERATE,&samplerate); - stream_control(demuxer->stream,SCTRL_AUD_GET_SAMPLESIZE,&samplesize); - stream_control(demuxer->stream,SCTRL_AUD_GET_FORMAT,&wtag); + demuxer->stream->ctrl(SCTRL_AUD_GET_CHANNELS,&channels); + demuxer->stream->ctrl(SCTRL_AUD_GET_SAMPLERATE,&samplerate); + demuxer->stream->ctrl(SCTRL_AUD_GET_SAMPLESIZE,&samplesize); + demuxer->stream->ctrl(SCTRL_AUD_GET_FORMAT,&wtag); sh_audio = demuxer->new_sh_audio(); sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); w->wFormatTag = sh_audio->wtag = wtag; Modified: mplayerxp/libmpdemux/demux_rawvideo.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -81,10 +81,10 @@ case 7: priv.width=1408;priv.height=1152;break; case 8: priv.width=352; priv.height=240; break; } - stream_control(demuxer->stream,SCTRL_VID_GET_WIDTH,&priv.width); - stream_control(demuxer->stream,SCTRL_VID_GET_HEIGHT,&priv.height); - stream_control(demuxer->stream,SCTRL_VID_GET_FORMAT,&priv.format); - stream_control(demuxer->stream,SCTRL_VID_GET_FPS,&priv.fps); + demuxer->stream->ctrl(SCTRL_VID_GET_WIDTH,&priv.width); + demuxer->stream->ctrl(SCTRL_VID_GET_HEIGHT,&priv.height); + demuxer->stream->ctrl(SCTRL_VID_GET_FORMAT,&priv.format); + demuxer->stream->ctrl(SCTRL_VID_GET_FPS,&priv.fps); if(!priv.width || !priv.height){ MSG_ERR("rawvideo: width or height not specified!\n"); Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -356,11 +356,10 @@ for(i=0;i<sizeof(stream_txt_ids)/sizeof(struct s_stream_txt_ids);i++) if(!info().get(stream_txt_ids[i].demuxer_id)) { char stream_name[256]; - if(stream_control(stream,stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { + if(stream->ctrl(stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { info().add(stream_txt_ids[i].demuxer_id,stream_name); } } - stream->demuxer=this; return MPXP_Ok; } Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -112,9 +112,9 @@ MSG_DBG2("Out of boundaries... seeking to %lli {in_cache(%i) %lli<%lli>%lli} \n" ,new_start,in_cache,START_FILEPOS(c),readpos,END_FILEPOS(c)); if(c->stream->eof() || c->eof) c->stream->reset(); - c->stream->driver->seek(new_start); + c->stream->seek(new_start); if(errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver_info->mrl,strerror(errno)); errno=0; } - if((c->packets[c->first].filepos=c->stream->driver->tell())<0) seek_eof=1; + if((c->packets[c->first].filepos=c->stream->tell())<0) seek_eof=1; c->last=c->first; if(c->packets[c->first].filepos < new_start-(off_t)c->stream->sector_size()) MSG_WARN("CACHE2: found wrong offset after seeking %lli (wanted: %lli)\n",c->packets[c->first].filepos,new_start); @@ -144,8 +144,8 @@ { CACHE2_PACKET_TLOCK(cidx); c->packets[cidx].sp.len=c->sector_size; - c->packets[cidx].filepos = c->stream->driver->tell(); - c->stream->driver->read(&c->packets[cidx].sp); + c->packets[cidx].filepos = c->stream->tell(); + c->stream->read(&c->packets[cidx].sp); MSG_DBG2("CACHE2: read_packet at %lli (wanted %u got %u type %i)",c->packets[cidx].filepos,c->sector_size,c->packets[cidx].sp.len,c->packets[cidx].sp.type); if(mp_conf.verbose>1) if(c->packets[cidx].sp.len>8) { @@ -154,7 +154,7 @@ MSG_DBG2("%02X ",(int)(unsigned char)c->packets[cidx].sp.buf[i]); } MSG_DBG2("\n"); - if(stream_control(c->stream,SCTRL_EOF,NULL)==MPXP_Ok) legacy_eof=1; + if(c->stream->ctrl(SCTRL_EOF,NULL)==MPXP_Ok) legacy_eof=1; else legacy_eof=0; if(c->packets[cidx].sp.len < 0 || (c->packets[cidx].sp.len == 0 && c->packets[cidx].sp.type == 0) || legacy_eof || seek_eof) { /* EOF */ @@ -354,7 +354,7 @@ do{ c->packets[cidx].state|=CPF_EMPTY; cidx=CP_NEXT(c,cidx); }while(cidx!=c->first); c->last=c->first; c->read_filepos=c->stream->start_pos(); - c->stream->driver->seek(c->read_filepos); + c->stream->seek(c->read_filepos); } } @@ -619,11 +619,6 @@ else return nc_stream_skip(s,len); } -MPXP_Rc __FASTCALL__ stream_control(const Stream *s,unsigned cmd,any_t*param) -{ - return nc_stream_control(s,cmd,param); -} - void __FASTCALL__ stream_reset(Stream *s) { if(s->cache_data) c2_stream_reset(s->cache_data); Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpstream/stream.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -98,9 +98,15 @@ reset(); } +Stream::Stream(Demuxer_Stream* ds) { + _type=Stream::Type_DS; + driver=ds->demuxer->stream->driver; + priv = ds; +} + Stream::~Stream(){ MSG_INFO("\n*** free_stream(drv:%s) called [errno: %s]***\n",driver_info->mrl,strerror(errno)); - if(driver) driver->close(); + if(driver) close(); delete buffer; delete driver; } @@ -161,6 +167,11 @@ delete buffer; return MPXP_False; } +MPXP_Rc Stream::ctrl(unsigned cmd,any_t* param) { return driver->ctrl(cmd,param); } +int Stream::read(stream_packet_t * sp) { return driver->read(sp); } +off_t Stream::seek(off_t off) { return driver->seek(off); } +off_t Stream::tell() const { return driver->tell(); } +void Stream::close() { driver->close(); } void Stream::reset(){ if(_eof){ @@ -191,15 +202,15 @@ sp.type=0; sp.len=s->sector_size(); sp.buf=(char *)s->buffer; - if(s->type()==Stream::Type_DS) len = reinterpret_cast<Demuxer_Stream*>(s->priv)->read_data(s->buffer,s->sector_size()); - else { if(!s->driver) { s->eof(1); return 0; } len = s->driver->read(&sp); } + if(s->type()==Stream::Type_DS) len = reinterpret_cast<Demuxer_Stream*>(s)->read_data(s->buffer,s->sector_size()); + else len = s->read(&sp); if(sp.type) { if(s->event_handler) s->event_handler(s,&sp); continue; } - if(s->driver->ctrl(SCTRL_EOF,NULL)==MPXP_Ok) legacy_eof=1; - else legacy_eof=0; + if(s->ctrl(SCTRL_EOF,NULL)==MPXP_Ok)legacy_eof=1; + else legacy_eof=0; if(sp.len<=0 || legacy_eof) { MSG_DBG3("nc_stream_read_cbuffer: Guess EOF\n"); @@ -230,8 +241,7 @@ MSG_DBG3("nc_stream_seek_long to %llu\n",newpos); if(newpos==0 || newpos!=s->pos()) { - if(!s->driver) { s->eof(1); return 0; } - s->pos(s->driver->seek(newpos)); + s->pos(s->seek(newpos)); if(errno) { MSG_WARN("nc_stream_seek(drv:%s) error: %s\n",s->driver_info->mrl,strerror(errno)); errno=0; } } MSG_DBG3("nc_stream_seek_long after: %llu\n",s->pos()); @@ -275,14 +285,6 @@ return s; } -Stream* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds) { - Stream* s = new(zeromem) Stream(Stream::Type_DS); - s->driver=ds->demuxer->stream->driver; - s->priv = ds; - check_pin("stream",ds->pin,DS_PIN); - return s; -} - int __FASTCALL__ nc_stream_read_char(Stream *s) { unsigned char retval; @@ -411,7 +413,4 @@ return 1; } -MPXP_Rc __FASTCALL__ nc_stream_control(const Stream *s,unsigned cmd,any_t*param) { - return s->driver->ctrl(cmd,param); -} } //namespace mpxp Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpstream/stream.h 2012-12-08 09:17:54 UTC (rev 522) @@ -39,7 +39,7 @@ }; struct cache_vars_s; - struct Demuxer; + class Demuxer_Stream; class Stream_Interface; struct stream_interface_info_t; /** Stream description */ @@ -58,40 +58,43 @@ Type_Menu =0x00000100, /**< Stream contains DVD menu... */ }; Stream(type_e type=Stream::Type_Unknown); + Stream(Demuxer_Stream* ds); virtual ~Stream(); - MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format,stream_callback event_handler); - void reset(); - void type(type_e);/**< assign new propertie for the stream (see STREAMTYPE_ for detail) */ - type_e type(); /**< properties of the stream (see STREAMTYPE_ for detail) */ - off_t pos() const; /**< SOF offset from begin of stream */ - void pos(off_t); /**< SOF offset from begin of stream */ - int eof() const; /**< indicates EOF */ - void eof(int); /**< set EOF */ - off_t start_pos() const; /**< real start of stream (without internet's headers) */ - off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ - unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ - float stream_pts() const; /**< PTS correction for idiotics DVD's discontinuities */ + virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format,stream_callback event_handler); + virtual int read(stream_packet_t * sp); + virtual off_t seek(off_t off); + virtual off_t tell() const; + virtual void close(); + virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); + virtual void reset(); + virtual void type(type_e);/**< assign new propertie for the stream (see STREAMTYPE_ for detail) */ + virtual type_e type(); /**< properties of the stream (see STREAMTYPE_ for detail) */ + virtual off_t pos() const; /**< SOF offset from begin of stream */ + virtual void pos(off_t); /**< SOF offset from begin of stream */ + virtual int eof() const; /**< indicates EOF */ + virtual void eof(int); /**< set EOF */ + virtual off_t start_pos() const; /**< real start of stream (without internet's headers) */ + virtual off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ + virtual unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ + virtual float stream_pts() const; /**< PTS correction for idiotics DVD's discontinuities */ + char antiviral_hole[RND_CHAR3]; unsigned pin; /**< personal identification number */ int file_format; /**< detected file format (by http:// protocol for example) */ unsigned int buf_pos; /**< position whitin of small cache */ unsigned int buf_len; /**< length of small cache */ unsigned char* buffer;/**< buffer of small cache */ - Demuxer* demuxer; /* parent demuxer */ struct cache_vars_s*cache_data; /**< large cache */ - Opaque* priv; /**< private data used by stream driver */ -#ifdef HAVE_STREAMING - networking_t* networking; /**< callback for internet networking control */ -#endif - Stream_Interface *driver; /**< low-level stream driver */ const stream_interface_info_t* driver_info; stream_callback event_handler; /**< callback for streams which provide events */ private: - type_e _type; - off_t _pos; /**< SOF offset from begin of stream */ - int _eof; /**< indicates EOF */ + Stream_Interface* driver; /**< low-level stream driver */ + Opaque* priv; /**< private data used by stream driver */ + type_e _type; + off_t _pos; /**< SOF offset from begin of stream */ + int _eof; /**< indicates EOF */ }; inline Stream::type_e operator~(Stream::type_e a) { return static_cast<Stream::type_e>(~static_cast<unsigned>(a)); } inline Stream::type_e operator|(Stream::type_e a, Stream::type_e b) { return static_cast<Stream::type_e>(static_cast<unsigned>(a)|static_cast<unsigned>(b)); } @@ -113,8 +116,6 @@ extern int __FASTCALL__ nc_stream_seek(Stream *s,off_t pos); extern int __FASTCALL__ nc_stream_skip(Stream *s,off_t len); - extern MPXP_Rc __FASTCALL__ nc_stream_control(const Stream *s,unsigned cmd,any_t*param); - /* this block describes interface to cache/non-cache stream functions */ extern int __FASTCALL__ stream_read_char(Stream *s); extern int __FASTCALL__ stream_read(Stream *s,any_t* mem,int total); @@ -123,7 +124,6 @@ extern int __FASTCALL__ stream_skip(Stream *s,off_t len); extern int __FASTCALL__ stream_eof(Stream *s); extern void __FASTCALL__ stream_set_eof(Stream *s,int eof); - extern MPXP_Rc __FASTCALL__ stream_control(const Stream *s,unsigned cmd,any_t*param); void __FASTCALL__ stream_reset(Stream *s); Stream* __FASTCALL__ new_memory_stream(const unsigned char* data,int len); Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/mplayerxp.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -793,7 +793,7 @@ static void __FASTCALL__ mpxp_stream_event_handler(Stream *s,const stream_packet_t *sp) { - stream_control(s,SCRTL_EVT_HANDLE,(any_t*)sp); + s->ctrl(SCRTL_EVT_HANDLE,(any_t*)sp); } static void init_benchmark(void) @@ -1007,7 +1007,7 @@ if(mp_conf.audio_lang) { 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) { + if(mp_conf.audio_id==-1 && stream->ctrl(SCTRL_LNG_GET_AID,lang)==MPXP_Ok) { mp_conf.audio_id=*(int *)lang; } delete lang; @@ -1015,7 +1015,7 @@ if(mp_conf.dvdsub_lang) { 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) { + if(mp_conf.dvdsub_id==-1 && stream->ctrl(SCTRL_LNG_GET_SID,lang)==MPXP_Ok) { mp_conf.dvdsub_id=*(int *)lang; } delete lang; @@ -1089,7 +1089,7 @@ if (mpxp_context().video().output->spudec==NULL) { unsigned *pal; MP_UNIT("spudec_init"); - if(stream_control(stream,SCTRL_VID_GET_PALETTE,&pal)==MPXP_Ok) + if(stream->ctrl(SCTRL_VID_GET_PALETTE,&pal)==MPXP_Ok) mpxp_context().video().output->spudec=spudec_new_scaled(pal,sh_video->src_w, sh_video->src_h); } @@ -1351,7 +1351,7 @@ #ifdef USE_OSD int MPXPSystem::paint_osd(int* osd_visible,int* in_pause) { - const Stream* stream=_demuxer->stream; + Stream* 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; @@ -1365,7 +1365,7 @@ } if(osd_function==OSD_DVDMENU) { rect_highlight_t hl; - if(stream_control(stream,SCTRL_VID_GET_HILIGHT,&hl)==MPXP_Ok) { + if(stream->ctrl(SCTRL_VID_GET_HILIGHT,&hl)==MPXP_Ok) { osd_set_nav_box (hl.sx, hl.sy, hl.ex, hl.ey); MSG_V("Set nav box: %i %i %i %i\n",hl.sx, hl.sy, hl.ex, hl.ey); vo_osd_changed (OSDTYPE_DVDNAV); @@ -1603,10 +1603,10 @@ 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); + stream->ctrl(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(stream->ctrl(SCRTL_MPXP_CMD,(any_t*)cmd->args[0].v.i)==MPXP_Ok) { if(cmd->args[0].v.i!=MP_CMD_DVDNAV_SELECT) { stream->type(Stream::Type_Menu); state->need_repaint=1; 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:35:45
|
Revision: 521 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=521&view=rev Author: nickols_k Date: 2012-12-08 08:35:38 +0000 (Sat, 08 Dec 2012) Log Message: ----------- combine various configurable network_* variables into structure Modified Paths: -------------- mplayerxp/cfg-mplayerxp.h mplayerxp/libmpstream/cookies.cpp mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/stream.h Modified: mplayerxp/cfg-mplayerxp.h =================================================================== --- mplayerxp/cfg-mplayerxp.h 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/cfg-mplayerxp.h 2012-12-08 08:35:38 UTC (rev 521) @@ -11,15 +11,6 @@ //extern char *sdl_adriver; #endif -extern int network_prefer_ipv4; -extern char *network_username; -extern char *network_password; -extern int network_bandwidth; -extern char *network_useragent; -extern int network_ipv4_only_proxy; -extern int network_cookies_enabled; -extern char *cookies_file; - extern af_cfg_t af_cfg; // Configuration for audio filters extern vf_cfg_t vf_cfg; // Configuration for audio filters @@ -42,19 +33,19 @@ #ifdef HAVE_STREAMING static const config_t net_config[]={ - {"ipv4", &network_prefer_ipv4, CONF_TYPE_FLAG, 0, 0, 1, "forces mplayerxp to use IPv4 protocol over network"}, + {"ipv4", &net_conf.prefer_ipv4, CONF_TYPE_FLAG, 0, 0, 1, "forces mplayerxp to use IPv4 protocol over network"}, #ifdef HAVE_AF_INET6 - {"ipv6", &network_prefer_ipv4, CONF_TYPE_FLAG, 0, 1, 0, "forces mplayerxp to use IPv6 protocol over network"}, + {"ipv6", &net_conf.prefer_ipv4, CONF_TYPE_FLAG, 0, 1, 0, "forces mplayerxp to use IPv6 protocol over network"}, #else {"ipv6", "MPlayerXP was compiled without IPv6 support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, #endif /* HAVE_AF_INET6 */ - {"ipv4-only-proxy", &network_ipv4_only_proxy, CONF_TYPE_FLAG, 0, 0, 1, "skip the proxy for IPv6 addresses"}, - {"user", &network_username, CONF_TYPE_STRING, 0, 0, 0, "specifies username for HTTP authentication"}, - {"passwd", &network_password, CONF_TYPE_STRING, 0, 0, 0, "specifies password for HTTP authentication"}, - {"bandwidth", &network_bandwidth, CONF_TYPE_INT, CONF_MIN, 0, 0, "specifies the maximum bandwidth for network streaming"}, - {"user-agent", &network_useragent, CONF_TYPE_STRING, 0, 0, 0, "specifies string as user agent for HTTP streaming"}, - {"cookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 0, 1, "send cookies when making HTTP requests"}, - {"cookies-file", &cookies_file, CONF_TYPE_STRING, 0, 0, 0, "Read HTTP cookies from file"}, + {"ipv4-only-proxy", &net_conf.ipv4_only_proxy, CONF_TYPE_FLAG, 0, 0, 1, "skip the proxy for IPv6 addresses"}, + {"user", &net_conf.username, CONF_TYPE_STRING, 0, 0, 0, "specifies username for HTTP authentication"}, + {"passwd", &net_conf.password, CONF_TYPE_STRING, 0, 0, 0, "specifies password for HTTP authentication"}, + {"bandwidth", &net_conf.bandwidth, CONF_TYPE_INT, CONF_MIN, 0, 0, "specifies the maximum bandwidth for network streaming"}, + {"user-agent", &net_conf.useragent, CONF_TYPE_STRING, 0, 0, 0, "specifies string as user agent for HTTP streaming"}, + {"cookies", &net_conf.cookies_enabled, CONF_TYPE_FLAG, 0, 0, 1, "send cookies when making HTTP requests"}, + {"cookies-file", &net_conf.cookies_file, CONF_TYPE_STRING, 0, 0, 0, "Read HTTP cookies from file"}, {NULL, NULL, 0, 0, 0, 0, NULL}, }; #endif Modified: mplayerxp/libmpstream/cookies.cpp =================================================================== --- mplayerxp/libmpstream/cookies.cpp 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/libmpstream/cookies.cpp 2012-12-08 08:35:38 UTC (rev 521) @@ -21,12 +21,11 @@ #include "cookies.h" #include "http.h" +#include "network.h" #include "stream_msg.h" #define MAX_COOKIES 20 -char *cookies_file = NULL; - typedef struct cookie_list_type { char *name; char *value; @@ -184,8 +183,8 @@ char *homedir; - if (cookies_file) - return load_cookies_from(cookies_file, list); + if (net_conf.cookies_file) + return load_cookies_from(net_conf.cookies_file, list); homedir = getenv("HOME"); if (!homedir) Modified: mplayerxp/libmpstream/network.cpp =================================================================== --- mplayerxp/libmpstream/network.cpp 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/libmpstream/network.cpp 2012-12-08 08:35:38 UTC (rev 521) @@ -49,16 +49,20 @@ #include "stream_msg.h" /* Variables for the command line option -user, -passwd & -bandwidth */ -char* network_username=NULL; -char* network_password=NULL; -int network_bandwidth=0; -int network_cookies_enabled = 0; -char* network_useragent=NULL; +net_config_t::net_config_t() + :username(NULL), + password(NULL), + bandwidth(0), + cookies_enabled(0), + cookies_file(NULL), + useragent(NULL), + prefer_ipv4(1), + ipv4_only_proxy(0) +{ +} +net_config_t::~net_config_t() {} +net_config_t net_conf; -/* IPv6 options */ -int network_prefer_ipv4 = 1; -int network_ipv4_only_proxy = 0; - static const struct { const char *mime_type; int demuxer_type; @@ -138,7 +142,7 @@ } #ifdef HAVE_AF_INET6 - if (network_ipv4_only_proxy && (gethostbyname(url->hostname)==NULL)) { + if (net_conf.ipv4_only_proxy && (gethostbyname(url->hostname)==NULL)) { MSG_WARN( "Could not find resolve remote hostname for AF_INET. Trying without proxy.\n"); return url_out; @@ -188,9 +192,9 @@ else snprintf(str, 256, "Host: %s", server_url->hostname ); http_set_field( http_hdr, str); - if (network_useragent) + if (net_conf.useragent) { - snprintf(str, 256, "User-Agent: %s", network_useragent); + snprintf(str, 256, "User-Agent: %s", net_conf.useragent); http_set_field(http_hdr, str); } else @@ -204,7 +208,7 @@ http_set_field(http_hdr, str); } - if (network_cookies_enabled) cookies_set( http_hdr, server_url->hostname, server_url->url ); + if (net_conf.cookies_enabled) cookies_set( http_hdr, server_url->hostname, server_url->url ); http_set_field( http_hdr, "Connection: closed"); http_add_basic_authentication( http_hdr, url->username, url->password ); @@ -298,8 +302,8 @@ } else { MSG_INFO("Authentication required\n"); } - if( network_username ) { - url->username = mp_strdup(network_username); + if( net_conf.username ) { + url->username = mp_strdup(net_conf.username); if( url->username==NULL ) { MSG_FATAL(MSGTR_OutOfMemory); return -1; @@ -308,8 +312,8 @@ MSG_ERR(MSGTR_ConnAuthFailed); return -1; } - if( network_password ) { - url->password = mp_strdup(network_password); + if( net_conf.password ) { + url->password = mp_strdup(net_conf.password); if( url->password==NULL ) { MSG_FATAL(MSGTR_OutOfMemory); return -1; @@ -696,7 +700,7 @@ sprintf(mrl,"rtsp://%s:%i/%s",networking->url->hostname,port,file); rtsp = rtsp_session_start(tcp,&mrl, file, networking->url->hostname, port, &redirected, - network_bandwidth,networking->url->username, + net_conf.bandwidth,networking->url->username, networking->url->password); if ( redirected == 1 ) { @@ -761,7 +765,7 @@ rc = MPXP_False; // Get the bandwidth available - networking->bandwidth = network_bandwidth; + networking->bandwidth = net_conf.bandwidth; // For RTP streams, we usually don't know the stream type until we open it. if( !strcasecmp( networking->url->protocol, "rtp")) { Modified: mplayerxp/libmpstream/network.h =================================================================== --- mplayerxp/libmpstream/network.h 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/libmpstream/network.h 2012-12-08 08:35:38 UTC (rev 521) @@ -30,6 +30,24 @@ struct libinput_t; class Tcp; } + +struct net_config_t { + public: + net_config_t(); + virtual ~net_config_t(); + + char* username; + char* password; + int bandwidth; + int cookies_enabled; + char* cookies_file; + char* useragent; +/* IPv6 options */ + int prefer_ipv4; + int ipv4_only_proxy; +}; +extern net_config_t net_conf; + enum networking_status { networking_stopped_e, networking_playing_e Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-08 08:35:38 UTC (rev 521) @@ -137,7 +137,6 @@ return MPXP_Ok; } -extern int network_bandwidth; extern int index_mode; MPXP_Rc Rtsp_Stream_Interface::open(const char *filename,unsigned flags) { @@ -149,7 +148,7 @@ networking = new_networking(); if (!networking) return MPXP_False; - networking->bandwidth = network_bandwidth; + networking->bandwidth = net_conf.bandwidth; url = url_new (filename); networking->url = check4proxies (url); Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-08 08:35:38 UTC (rev 521) @@ -91,7 +91,6 @@ return MPXP_Ok; } -extern int network_bandwidth; MPXP_Rc Udp_Stream_Interface::open(const char *filename,unsigned flags) { URL_t *url; @@ -100,7 +99,7 @@ networking = new_networking(); if (!networking) return MPXP_False; - networking->bandwidth = network_bandwidth; + networking->bandwidth = net_conf.bandwidth; url = url_new (filename); networking->url = check4proxies (url); if (url->port == 0) { Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-08 08:15:09 UTC (rev 520) +++ mplayerxp/libmpstream/stream.h 2012-12-08 08:35:38 UTC (rev 521) @@ -13,6 +13,7 @@ #include "network.h" #endif +struct networking_t; namespace mpxp { struct libinput_t; enum { 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. |
From: <nic...@us...> - 2012-12-08 07:53:13
|
Revision: 519 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=519&view=rev Author: nickols_k Date: 2012-12-08 07:53:03 +0000 (Sat, 08 Dec 2012) Log Message: ----------- move libinput into private of class Tcp Modified Paths: -------------- mplayerxp/Makefile mplayerxp/libmpstream/asf_mmst_streaming.cpp mplayerxp/libmpstream/asf_streaming.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/librtsp/rtsp_session.cpp mplayerxp/libmpstream/librtsp/rtsp_session.h mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_lavc.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_null.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream_internal.h mplayerxp/libmpstream/tcp.cpp mplayerxp/libmpstream/tcp.h Modified: mplayerxp/Makefile =================================================================== --- mplayerxp/Makefile 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/Makefile 2012-12-08 07:53:03 UTC (rev 519) @@ -107,7 +107,7 @@ ./version.sh `$(CC) --version` $(MAKE) dep -dep: +dep: version.h $(CXX) -MM $(CXXFLAGS) $(SRCS) 1>.depend $(DO_MAKE) Modified: mplayerxp/libmpstream/asf_mmst_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -517,7 +517,7 @@ path=unescpath; if( url1->port==0 ) url1->port=1755; - tcp.open(networking->libinput, url1->hostname, url1->port, Tcp::IP4); + tcp.open(url1->hostname, url1->port, Tcp::IP4); if( !tcp.established()) { delete path; return MPXP_False; Modified: mplayerxp/libmpstream/asf_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_streaming.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/asf_streaming.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -749,7 +749,7 @@ } else { if( url->port==0 ) url->port = 80; } - tcp.open(networking->libinput, url->hostname, url->port, Tcp::IP4); + tcp.open(url->hostname, url->port, Tcp::IP4); if( !tcp.established()) return MPXP_False; http_hdr = asf_http_request( networking ); Modified: mplayerxp/libmpstream/cddb.cpp =================================================================== --- mplayerxp/libmpstream/cddb.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/cddb.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -144,7 +144,7 @@ int __FASTCALL__ cddb_http_request(const char *command, int (*reply_parser)(HTTP_header_t*,cddb_data_t*), cddb_data_t *cddb_data) { char request[4096]; int ret = 0; - Tcp* tcp; + Tcp tcp(cddb_data->libinput,-1); URL_t *url; HTTP_header_t *http_hdr; @@ -159,16 +159,14 @@ return -1; } - tcp = http_send_request(cddb_data->libinput,url,0); - if( !tcp ) { + if(http_send_request(tcp,url,0)!=MPXP_Ok) { MSG_ERR("failed to send the http request\n"); return -1; } - http_hdr = http_read_response( *tcp ); + http_hdr = http_read_response( tcp ); if( http_hdr==NULL ) { MSG_ERR("Failed to read the http response\n"); - delete tcp; return -1; } @@ -188,7 +186,6 @@ http_free( http_hdr ); url_free( url ); - delete tcp; return ret; } @@ -494,7 +491,7 @@ } user_name = getenv("LOGNAME"); } - sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s", user_name, host_name, "MPlayerXP"); + sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayerXP", VERSION); } int __FASTCALL__ cddb_retrieve(cddb_data_t *cddb_data) { Modified: mplayerxp/libmpstream/librtsp/rtsp_session.cpp =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp_session.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/librtsp/rtsp_session.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -219,7 +219,7 @@ return rtsp_session; } -int rtsp_session_read (rtsp_session_t *self, char *data, int len) { +int rtsp_session_read (libinput_t* libinput,rtsp_session_t *self, char *data, int len) { if (self->real_session) { int to_copy=len; @@ -267,7 +267,7 @@ else if (self->rtp_session) { int l = 0; - Tcp tcp(self->rtp_session->rtp_socket); + Tcp tcp(libinput,self->rtp_session->rtp_socket); l = read_rtp_from_server (tcp, data, len); /* send RTSP and RTCP keepalive */ Modified: mplayerxp/libmpstream/librtsp/rtsp_session.h =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp_session.h 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/librtsp/rtsp_session.h 2012-12-08 07:53:03 UTC (rev 519) @@ -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(rtsp_session_t *session, char *data, int len); +int rtsp_session_read(libinput_t* libinput,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-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/network.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -94,13 +94,12 @@ { "misc/ultravox", Demuxer::Type_NSV} }; -networking_t* new_networking(libinput_t*libinput) { +networking_t* new_networking() { networking_t *networking = new(zeromem) networking_t; if( networking==NULL ) { MSG_FATAL(MSGTR_OutOfMemory); return NULL; } - networking->libinput=libinput; return networking; } @@ -166,11 +165,10 @@ return url_out; } -Tcp* http_send_request(libinput_t* libinput, URL_t *url, off_t pos ) { +MPXP_Rc http_send_request(Tcp& tcp, URL_t *url, off_t pos ) { HTTP_header_t *http_hdr; URL_t *server_url; char str[256]; - Tcp* tcp=NULL; int ret; int proxy = 0; // Boolean @@ -215,17 +213,19 @@ if( proxy ) { if( url->port==0 ) url->port = 8080; // Default port for the proxy server - tcp = new Tcp(libinput, url->hostname, url->port, Tcp::IP4); + tcp.close(); + tcp.open(url->hostname, url->port, Tcp::IP4); url_free( server_url ); server_url = NULL; } else { if( server_url->port==0 ) server_url->port = 80; // Default port for the web server - tcp = new Tcp(libinput, server_url->hostname, server_url->port, Tcp::IP4); + tcp.close(); + tcp.open(server_url->hostname, server_url->port, Tcp::IP4); } - if(!tcp->established()) goto err_out; + if(!tcp.established()) goto err_out; MSG_DBG2("Request: [%s]\n", http_hdr->buffer ); - ret = tcp->write((uint8_t*)(http_hdr->buffer), http_hdr->buffer_size); + ret = tcp.write((uint8_t*)(http_hdr->buffer), http_hdr->buffer_size); if( ret!=(int)http_hdr->buffer_size ) { MSG_ERR("Error while sending HTTP request: didn't sent all the request\n"); goto err_out; @@ -233,13 +233,12 @@ http_free( http_hdr ); - return tcp; + return MPXP_Ok; err_out: - if (tcp) delete tcp; http_free(http_hdr); if (proxy && server_url) url_free(server_url); - return NULL; + return MPXP_False; } HTTP_header_t* http_read_response( Tcp& tcp ) { @@ -323,13 +322,9 @@ off_t http_seek(Tcp& tcp, networking_t *networking, off_t pos ) { HTTP_header_t *http_hdr = NULL; - Tcp* other_tcp; tcp.close(); - other_tcp = http_send_request(networking->libinput, networking->url, pos ); - if(! other_tcp->established() ) return 0; - tcp=*other_tcp; - delete other_tcp; + if(http_send_request(tcp,networking->url, pos)==MPXP_Ok) return 0; http_hdr = http_read_response(tcp); @@ -398,7 +393,7 @@ #endif // HTTP based protocol if( !strcasecmp(url->protocol, "http") || !strcasecmp(url->protocol, "http_proxy") ) { - tcp = *http_send_request(networking->libinput, url, 0 ); + http_send_request(tcp, url, 0 ); if(!tcp.established()) goto err_out; http_hdr = http_read_response(tcp); @@ -565,7 +560,7 @@ MPXP_Rc ret; if( !tcp.established() ) { - tcp = *http_send_request(networking->libinput, networking->url,0); + http_send_request(tcp, networking->url,0); if( !tcp.established() ) return MPXP_False; http_hdr = http_read_response(tcp); if( http_hdr==NULL ) return MPXP_False; @@ -655,7 +650,7 @@ MPXP_Rc pnm_networking_start(Tcp& tcp,networking_t *networking ) { pnm_t *pnm; - tcp.open(networking->libinput, networking->url->hostname, + tcp.open(networking->url->hostname, networking->url->port ? networking->url->port : 7070); if(!tcp.established()) return MPXP_False; Modified: mplayerxp/libmpstream/network.h =================================================================== --- mplayerxp/libmpstream/network.h 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/network.h 2012-12-08 07:53:03 UTC (rev 519) @@ -47,20 +47,19 @@ int (*networking_read)( Tcp& fd, char *buffer, int buffer_size, networking_t *stream_ctrl ); int (*networking_seek)( Tcp& fd, off_t pos, networking_t *stream_ctrl ); any_t*data; - libinput_t* libinput; /**< provides possibility to inperrupt network streams */ }; extern void fixup_network_stream_cache(networking_t *s); extern MPXP_Rc networking_start(Tcp& fd,networking_t *n, URL_t *url); extern int networking_bufferize(networking_t *networking,unsigned char *buffer, int size); -extern networking_t *new_networking(libinput_t* libinput); +extern networking_t *new_networking(); extern void free_networking( networking_t *networking ); extern URL_t* check4proxies( URL_t *url ); int nop_networking_read(Tcp& fd, char *buffer, int size, networking_t *stream_ctrl ); int nop_networking_seek(Tcp& fd, off_t pos, networking_t *stream_ctrl ); -Tcp* http_send_request(libinput_t* libinput,URL_t *url, off_t pos); +MPXP_Rc http_send_request(Tcp& tcp,URL_t *url, off_t pos); HTTP_header_t *http_read_response(Tcp& fd); int http_authenticate(HTTP_header_t *http_hdr, URL_t *url, int *auth_retry); Modified: mplayerxp/libmpstream/s_cdd.cpp =================================================================== --- mplayerxp/libmpstream/s_cdd.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_cdd.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -20,10 +20,10 @@ namespace mpxp { class Cdda_Stream_Interface : public Stream_Interface { public: - Cdda_Stream_Interface(); + Cdda_Stream_Interface(libinput_t* libinput); virtual ~Cdda_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -39,14 +39,15 @@ track_t track_idx; }; -Cdda_Stream_Interface::Cdda_Stream_Interface():track_idx(255) {} +Cdda_Stream_Interface::Cdda_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput), + track_idx(255) {} Cdda_Stream_Interface::~Cdda_Stream_Interface() {} -MPXP_Rc Cdda_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc Cdda_Stream_Interface::open(const char *filename,unsigned flags) { const char *param; char *device; - UNUSED(libinput); UNUSED(flags); if(strcmp(filename,"help") == 0) { MSG_HINT("Usage: cdda://<@device><#trackno>\n"); @@ -114,7 +115,7 @@ return MPXP_False; } -static Stream_Interface* query_cdda_interface() { return new(zeromem) Cdda_Stream_Interface; } +static Stream_Interface* query_cdda_interface(libinput_t* libinput) { return new(zeromem) Cdda_Stream_Interface(libinput); } extern const stream_interface_info_t cdda_stream = { @@ -125,15 +126,19 @@ class Cddb_Stream_Interface : public Cdda_Stream_Interface { public: - Cddb_Stream_Interface(); + Cddb_Stream_Interface(libinput_t* libinput); virtual ~Cddb_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); + private: + libinput_t* libinput; }; -Cddb_Stream_Interface::Cddb_Stream_Interface() {} +Cddb_Stream_Interface::Cddb_Stream_Interface(libinput_t*_libinput) + :Cdda_Stream_Interface(_libinput), + libinput(_libinput) {} Cddb_Stream_Interface::~Cddb_Stream_Interface() {} -MPXP_Rc Cddb_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc Cddb_Stream_Interface::open(const char *filename,unsigned flags) { #ifdef HAVE_STREAMING const char *param; @@ -153,7 +158,7 @@ #endif } -static Stream_Interface* query_cddb_interface() { return new(zeromem) Cddb_Stream_Interface; } +static Stream_Interface* query_cddb_interface(libinput_t* libinput) { return new(zeromem) Cddb_Stream_Interface(libinput); } extern const stream_interface_info_t cddb_stream = { "cddb://", Modified: mplayerxp/libmpstream/s_dvdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -50,10 +50,10 @@ class DvdNav_Stream_Interface : public Stream_Interface { public: - DvdNav_Stream_Interface(); + DvdNav_Stream_Interface(libinput_t* libinput); virtual ~DvdNav_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -93,8 +93,9 @@ float _stream_pts; }; -DvdNav_Stream_Interface::DvdNav_Stream_Interface() - :hlev(*new dvdnav_highlight_event_t) {} +DvdNav_Stream_Interface::DvdNav_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput), + hlev(*new dvdnav_highlight_event_t) {} DvdNav_Stream_Interface::~DvdNav_Stream_Interface() { dvdnav_close(dvdnav); delete &hlev; @@ -178,13 +179,12 @@ return 0; } -MPXP_Rc DvdNav_Stream_Interface::open(libinput_t*libinput,const char *_filename,unsigned flags) +MPXP_Rc DvdNav_Stream_Interface::open(const char *_filename,unsigned flags) { const char *param; char *dvd_device; int ntitles; UNUSED(flags); - UNUSED(libinput); filename=_filename; param=mrl_parse_line(_filename,NULL,NULL,&dvd_device,NULL); if(strcmp(param,"help") == 0) { @@ -590,7 +590,7 @@ return MPXP_False; } -static Stream_Interface* query_interface() { return new(zeromem) DvdNav_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) DvdNav_Stream_Interface(libinput); } extern const stream_interface_info_t dvdnav_stream = { Modified: mplayerxp/libmpstream/s_dvdread.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdread.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_dvdread.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -51,10 +51,10 @@ class DvdRead_Stream_Interface : public Stream_Interface { public: - DvdRead_Stream_Interface(); + DvdRead_Stream_Interface(libinput_t* libinput); virtual ~DvdRead_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -111,10 +111,9 @@ off_t _end_pos; }; -DvdRead_Stream_Interface::DvdRead_Stream_Interface() - :dvd_chapter(1),dvd_angle(1) -{ -} +DvdRead_Stream_Interface::DvdRead_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput), + dvd_chapter(1),dvd_angle(1) {} DvdRead_Stream_Interface::~DvdRead_Stream_Interface() {} static const char * dvd_audio_stream_types[8] = @@ -589,7 +588,7 @@ dvd_angle=1; } -MPXP_Rc DvdRead_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc DvdRead_Stream_Interface::open(const char *filename,unsigned flags) { UNUSED(flags); int dvd_title; @@ -598,7 +597,6 @@ char param[256]; last_title=-1; - UNUSED(libinput); if(strcmp(filename,"help") == 0 || strlen(filename)==10) { MSG_HINT("Usage: dvdread://<@device>#<titleno>-<lasttitle>,<chapter>-<lastchapter>,<angle>\n"); return MPXP_False; @@ -778,7 +776,7 @@ return MPXP_False; } -static Stream_Interface* query_interface() { return new(zeromem) DvdRead_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) DvdRead_Stream_Interface(libinput); } extern const stream_interface_info_t dvdread_stream = { Modified: mplayerxp/libmpstream/s_file.cpp =================================================================== --- mplayerxp/libmpstream/s_file.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_file.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -22,10 +22,10 @@ namespace mpxp { class File_Stream_Interface : public Stream_Interface { public: - File_Stream_Interface(); + File_Stream_Interface(libinput_t* libinput); virtual ~File_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -41,13 +41,14 @@ off_t end_pos; }; -File_Stream_Interface::File_Stream_Interface():fd(0),was_open(0),spos(0) {} +File_Stream_Interface::File_Stream_Interface(libinput_t*l) + :Stream_Interface(l), + fd(0),was_open(0),spos(0) {} File_Stream_Interface::~File_Stream_Interface() {} -MPXP_Rc File_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc File_Stream_Interface::open(const char *filename,unsigned flags) { UNUSED(flags); - UNUSED(libinput); if(strcmp(filename,"-")==0) fd=0; else fd=::open(filename,O_RDONLY); if(fd<0) { @@ -112,7 +113,7 @@ return MPXP_Unknown; } -static Stream_Interface* query_file_interface() { return new(zeromem) File_Stream_Interface; } +static Stream_Interface* query_file_interface(libinput_t* libinput) { return new(zeromem) File_Stream_Interface(libinput); } extern const stream_interface_info_t file_stream = { @@ -123,21 +124,20 @@ class Stdin_Stream_Interface : public File_Stream_Interface { public: - Stdin_Stream_Interface(); + Stdin_Stream_Interface(libinput_t* libinput); virtual ~Stdin_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); }; -Stdin_Stream_Interface::Stdin_Stream_Interface() {} +Stdin_Stream_Interface::Stdin_Stream_Interface(libinput_t*l):File_Stream_Interface(l) {} Stdin_Stream_Interface::~Stdin_Stream_Interface() {} -MPXP_Rc Stdin_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) { - UNUSED(libinput); +MPXP_Rc Stdin_Stream_Interface::open(const char *filename,unsigned flags) { UNUSED(filename); - return File_Stream_Interface::open(NULL,"-",flags); + return File_Stream_Interface::open("-",flags); } -static Stream_Interface* query_stdin_interface() { return new(zeromem) Stdin_Stream_Interface; } +static Stream_Interface* query_stdin_interface(libinput_t* libinput) { return new(zeromem) Stdin_Stream_Interface(libinput); } extern const stream_interface_info_t stdin_stream = { Modified: mplayerxp/libmpstream/s_ftp.cpp =================================================================== --- mplayerxp/libmpstream/s_ftp.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_ftp.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -27,10 +27,10 @@ namespace mpxp { class Ftp_Stream_Interface : public Stream_Interface { public: - Ftp_Stream_Interface(); + Ftp_Stream_Interface(libinput_t* libinput); virtual ~Ftp_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -52,7 +52,6 @@ int port; const char* filename; URL_t* url; - libinput_t* libinput; char* cput,*cget; Tcp tcp; @@ -62,7 +61,9 @@ off_t file_len; }; -Ftp_Stream_Interface::Ftp_Stream_Interface():tcp(-1) {} +Ftp_Stream_Interface::Ftp_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput), + tcp(libinput,-1) {} Ftp_Stream_Interface::~Ftp_Stream_Interface() { SendCmd("QUIT",NULL); if(buf) delete buf; @@ -210,7 +211,7 @@ } sscanf(par+1,"%u,%u,%u,%u,%u,%u",&num[0],&num[1],&num[2],&num[3],&num[4],&num[5]); snprintf(str,127,"%d.%d.%d.%d",num[0],num[1],num[2],num[3]); - tcp.open(libinput,str,(num[4]<<8)+num[5]); + tcp.open(str,(num[4]<<8)+num[5]); if(fd < 0) MSG_ERR("[ftp] failed to create data connection\n"); return 1; @@ -312,14 +313,13 @@ if(tcp.established()) tcp.close(); } -MPXP_Rc Ftp_Stream_Interface::open(libinput_t*_libinput,const char *_filename,unsigned flags) +MPXP_Rc Ftp_Stream_Interface::open(const char *_filename,unsigned flags) { int resp; char str[256],rsp_txt[256]; char *uname; UNUSED(flags); - libinput=_libinput; if(!(uname=new char [strlen(_filename)+7])) return MPXP_False; strcpy(uname,"ftp://"); strcat(uname,_filename); @@ -339,7 +339,7 @@ MSG_V("FTP: Opening ~%s :%s @%s :%i %s\n",user,pass,host,port,filename); // Open the control connection - tcp.open(libinput,host,port); + tcp.open(host,port); if(!tcp.established()) { url_free(url); @@ -428,7 +428,7 @@ return MPXP_Unknown; } -static Stream_Interface* query_interface() { return new(zeromem) Ftp_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Ftp_Stream_Interface(libinput); } /* "reuse a bit of code from ftplib written by Thomas Pfau", */ extern const stream_interface_info_t ftp_stream = Modified: mplayerxp/libmpstream/s_lavc.cpp =================================================================== --- mplayerxp/libmpstream/s_lavc.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_lavc.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -13,10 +13,10 @@ namespace mpxp { class Lavs_Stream_Interface : public Stream_Interface { public: - Lavs_Stream_Interface(); + Lavs_Stream_Interface(libinput_t* libinput); virtual ~Lavs_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -31,7 +31,9 @@ off_t end_pos; }; -Lavs_Stream_Interface::Lavs_Stream_Interface():ctx(NULL),end_pos(-1) {} +Lavs_Stream_Interface::Lavs_Stream_Interface(libinput_t*libinput) + :Stream_Interface(libinput), + ctx(NULL),end_pos(-1) {} Lavs_Stream_Interface::~Lavs_Stream_Interface() { if(ctx) ffurl_close(ctx); } @@ -64,12 +66,11 @@ void Lavs_Stream_Interface::close() {} -MPXP_Rc Lavs_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc Lavs_Stream_Interface::open(const char *filename,unsigned flags) { int64_t _size; UNUSED(flags); - UNUSED(libinput); av_register_all(); MSG_V("[lavc] Opening %s\n", filename); @@ -84,7 +85,7 @@ off_t Lavs_Stream_Interface::size() const { return end_pos; } off_t Lavs_Stream_Interface::sector_size() const { return STREAM_BUFFER_SIZE; } -static Stream_Interface* query_interface() { return new(zeromem) Lavs_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Lavs_Stream_Interface(libinput); } extern const stream_interface_info_t lavs_stream = { Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -23,10 +23,10 @@ namespace mpxp { class Network_Stream_Interface : public Stream_Interface { public: - Network_Stream_Interface(); + Network_Stream_Interface(libinput_t* libinput); virtual ~Network_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -42,7 +42,9 @@ networking_t* networking; }; -Network_Stream_Interface::Network_Stream_Interface():tcp(-1) {} +Network_Stream_Interface::Network_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput), + tcp(libinput,-1) {} Network_Stream_Interface::~Network_Stream_Interface() { if(url) { url_free(url); @@ -50,12 +52,12 @@ } } -MPXP_Rc Network_Stream_Interface::open(libinput_t* libinput,const char *filename,unsigned flags) +MPXP_Rc Network_Stream_Interface::open(const char *filename,unsigned flags) { UNUSED(flags); url = url_new(filename); if(url) { - networking=new_networking(libinput); + networking=new_networking(); if(networking_start(tcp,networking,url)!=MPXP_Ok){ MSG_ERR(MSGTR_UnableOpenURL, filename); url_free(url); @@ -113,7 +115,7 @@ return MPXP_Unknown; } -static Stream_Interface* query_interface() { return new(zeromem) Network_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Network_Stream_Interface(libinput); } extern const stream_interface_info_t network_stream = { Modified: mplayerxp/libmpstream/s_null.cpp =================================================================== --- mplayerxp/libmpstream/s_null.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_null.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -10,10 +10,10 @@ namespace mpxp { class Null_Stream_Interface : public Stream_Interface { public: - Null_Stream_Interface(); + Null_Stream_Interface(libinput_t* libinput); virtual ~Null_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -24,11 +24,10 @@ virtual off_t sector_size() const; }; -Null_Stream_Interface::Null_Stream_Interface() {} +Null_Stream_Interface::Null_Stream_Interface(libinput_t*libinput):Stream_Interface(libinput) {} Null_Stream_Interface::~Null_Stream_Interface() {} -MPXP_Rc Null_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) { - UNUSED(libinput); +MPXP_Rc Null_Stream_Interface::open(const char *filename,unsigned flags) { UNUSED(filename); UNUSED(flags); return MPXP_False; @@ -47,7 +46,7 @@ off_t Null_Stream_Interface::size() const { return 0; } off_t Null_Stream_Interface::sector_size() const { return 0; } -static Stream_Interface* query_interface() { return new(zeromem) Null_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Null_Stream_Interface(libinput); } extern const stream_interface_info_t null_stream = { Modified: mplayerxp/libmpstream/s_oss.cpp =================================================================== --- mplayerxp/libmpstream/s_oss.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_oss.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -30,10 +30,10 @@ namespace mpxp { class Oss_Stream_Interface : public Stream_Interface { public: - Oss_Stream_Interface(); + Oss_Stream_Interface(libinput_t* libinput); virtual ~Oss_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -51,17 +51,17 @@ unsigned _sector_size; }; -Oss_Stream_Interface::Oss_Stream_Interface() {} +Oss_Stream_Interface::Oss_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput) {} Oss_Stream_Interface::~Oss_Stream_Interface() {} -MPXP_Rc Oss_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc Oss_Stream_Interface::open(const char *filename,unsigned flags) { char *args; char *oss_device,*comma; unsigned tmp,param; int err; UNUSED(flags); - UNUSED(libinput); if(strcmp(filename,"help") == 0) { MSG_HINT("Usage: oss://<@device>#<channels>,<samplerate>,<sampleformat>\n"); return MPXP_False; @@ -270,7 +270,7 @@ return MPXP_Unknown; } -static Stream_Interface* query_interface() { return new(zeromem) Oss_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Oss_Stream_Interface(libinput); } extern const stream_interface_info_t oss_stream = { Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -29,10 +29,10 @@ namespace mpxp { class Rtsp_Stream_Interface : public Stream_Interface { public: - Rtsp_Stream_Interface(); + Rtsp_Stream_Interface(libinput_t* libinput); virtual ~Rtsp_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -46,16 +46,20 @@ networking_t* networking; Tcp tcp; + libinput_t* libinput; }; -Rtsp_Stream_Interface::Rtsp_Stream_Interface():tcp(-1) {} +Rtsp_Stream_Interface::Rtsp_Stream_Interface(libinput_t* _libinput) + :Stream_Interface(_libinput), + tcp(_libinput,-1), + libinput(_libinput) {} Rtsp_Stream_Interface::~Rtsp_Stream_Interface() {} #define RTSP_DEFAULT_PORT 554 int Rtsp_Stream_Interface::read(stream_packet_t*sp) { - return rtsp_session_read (reinterpret_cast<rtsp_session_t*>(networking->data), sp->buf, sp->len); + return rtsp_session_read (libinput,reinterpret_cast<rtsp_session_t*>(networking->data), sp->buf, sp->len); } off_t Rtsp_Stream_Interface::seek(off_t newpos) { return newpos; } @@ -94,12 +98,12 @@ do { redirected = 0; - tcp.open(networking->libinput,networking->url->hostname, + tcp.open(networking->url->hostname, port = (networking->url->port ? networking->url->port : RTSP_DEFAULT_PORT)); if (!tcp.established() && !networking->url->port) - tcp.open(networking->libinput,networking->url->hostname, + tcp.open(networking->url->hostname, port = 7070); if (!tcp.established()) return MPXP_False; file = networking->url->file; @@ -137,14 +141,14 @@ extern int network_bandwidth; extern int index_mode; -MPXP_Rc Rtsp_Stream_Interface::open(libinput_t* libinput,const char *filename,unsigned flags) +MPXP_Rc Rtsp_Stream_Interface::open(const char *filename,unsigned flags) { URL_t *url; UNUSED(flags); if(strncmp(filename,"rtsp://",7)!=0) return MPXP_False; MSG_V("STREAM_RTSP, URL: %s\n", filename); - networking = new_networking(libinput); + networking = new_networking(); if (!networking) return MPXP_False; networking->bandwidth = network_bandwidth; @@ -166,7 +170,7 @@ off_t Rtsp_Stream_Interface::size() const { return 0; } off_t Rtsp_Stream_Interface::sector_size() const { return 1; } -static Stream_Interface* query_interface() { return new(zeromem) Rtsp_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Rtsp_Stream_Interface(libinput); } /* "reuse a bit of code from ftplib written by Thomas Pfau", */ extern const stream_interface_info_t rtsp_stream = Modified: mplayerxp/libmpstream/s_tv.cpp =================================================================== --- mplayerxp/libmpstream/s_tv.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_tv.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -581,10 +581,10 @@ /* fill demux->video and demux->audio */ class Tv_Stream_Interface : public Stream_Interface { public: - Tv_Stream_Interface(); + Tv_Stream_Interface(libinput_t* libinput); virtual ~Tv_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -598,13 +598,12 @@ tvi_handle_t* priv; }; -Tv_Stream_Interface::Tv_Stream_Interface() { } +Tv_Stream_Interface::Tv_Stream_Interface(libinput_t*libinput):Stream_Interface(libinput) {} Tv_Stream_Interface::~Tv_Stream_Interface() { delete priv; } -MPXP_Rc Tv_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc Tv_Stream_Interface::open(const char *filename,unsigned flags) { UNUSED(flags); - UNUSED(libinput); mrl_parse_params(filename,tvopts_conf); /* create tvi handler */ if(!(priv = tv_begin())) goto tv_err; @@ -665,7 +664,7 @@ off_t Tv_Stream_Interface::size() const { return -1; } off_t Tv_Stream_Interface::sector_size() const { return 0; } -static Stream_Interface* query_interface() { return new(zeromem) Tv_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Tv_Stream_Interface(libinput); } extern const stream_interface_info_t tv_stream = { Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -28,10 +28,10 @@ namespace mpxp { class Udp_Stream_Interface : public Stream_Interface { public: - Udp_Stream_Interface(); + Udp_Stream_Interface(libinput_t* libinput); virtual ~Udp_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -48,7 +48,10 @@ Tcp tcp; }; -Udp_Stream_Interface::Udp_Stream_Interface():udp(-1),tcp(-1) {} +Udp_Stream_Interface::Udp_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput), + udp(-1), + tcp(libinput,-1) {} Udp_Stream_Interface::~Udp_Stream_Interface() {} int Udp_Stream_Interface::read(stream_packet_t*sp) @@ -89,12 +92,12 @@ } extern int network_bandwidth; -MPXP_Rc Udp_Stream_Interface::open(libinput_t* libinput,const char *filename,unsigned flags) +MPXP_Rc Udp_Stream_Interface::open(const char *filename,unsigned flags) { URL_t *url; UNUSED(flags); MSG_V("STREAM_UDP, URL: %s\n", filename); - networking = new_networking(libinput); + networking = new_networking(); if (!networking) return MPXP_False; networking->bandwidth = network_bandwidth; @@ -119,7 +122,7 @@ off_t Udp_Stream_Interface::size() const { return 0; } off_t Udp_Stream_Interface::sector_size() const { return 1; } -static Stream_Interface* query_interface() { return new(zeromem) Udp_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) Udp_Stream_Interface(libinput); } /* "reuse a bit of code from ftplib written by Thomas Pfau", */ extern const stream_interface_info_t rtsp_stream = Modified: mplayerxp/libmpstream/s_vcdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -31,10 +31,10 @@ class VcdNav_Stream_Interface : public Stream_Interface { public: - VcdNav_Stream_Interface(); + VcdNav_Stream_Interface(libinput_t* libinput); virtual ~VcdNav_Stream_Interface(); - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags); + virtual MPXP_Rc open(const char *filename,unsigned flags); virtual int read(stream_packet_t * sp); virtual off_t seek(off_t off); virtual off_t tell() const; @@ -63,7 +63,8 @@ lsn_t vcd_sector_lsn; }; -VcdNav_Stream_Interface::VcdNav_Stream_Interface() {} +VcdNav_Stream_Interface::VcdNav_Stream_Interface(libinput_t* libinput) + :Stream_Interface(libinput) {} VcdNav_Stream_Interface::~VcdNav_Stream_Interface() { vcdinfo_close(fd); if(track) delete track; @@ -82,7 +83,7 @@ } } -MPXP_Rc VcdNav_Stream_Interface::open(libinput_t*libinput,const char *filename,unsigned flags) +MPXP_Rc VcdNav_Stream_Interface::open(const char *filename,unsigned flags) { const char *param; char *device,*dev; @@ -90,7 +91,6 @@ int vcd_track=-1; vcdinfo_open_return_t open_rc; UNUSED(flags); - UNUSED(libinput); if(strcmp(filename,"help") == 0) { MSG_HINT("Usage: vcdnav://<@device><#trackno>\n"); return MPXP_False; @@ -267,7 +267,7 @@ return MPXP_Unknown; } -static Stream_Interface* query_interface() { return new(zeromem) VcdNav_Stream_Interface; } +static Stream_Interface* query_interface(libinput_t* libinput) { return new(zeromem) VcdNav_Stream_Interface(libinput); } extern const stream_interface_info_t vcdnav_stream = { Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/stream.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -132,9 +132,9 @@ mrl_len=strlen(sdrivers[i]->mrl); if(strncmp(filename,sdrivers[i]->mrl,mrl_len)==0||sdrivers[i]->mrl[0]=='*') { MSG_V("Opening %s ... ",sdrivers[i]->mrl); - Stream_Interface* drv = sdrivers[i]->query_interface(); + Stream_Interface* drv = sdrivers[i]->query_interface(libinput); if(sdrivers[i]->mrl[0]=='*') mrl_len=0; - if(drv->open(libinput,&filename[mrl_len],0)==MPXP_Ok) { + if(drv->open(&filename[mrl_len],0)==MPXP_Ok) { MSG_V("OK\n"); *ff = file_format; driver_info=sdrivers[i]; @@ -147,9 +147,9 @@ MSG_V("False\n"); } } - Stream_Interface* file_drv = file_stream.query_interface(); + Stream_Interface* file_drv = file_stream.query_interface(libinput); /* Last hope if not mrl specified */ - if(file_drv->open(libinput,filename,0)) { + if(file_drv->open(filename,0)) { *ff = file_format; driver_info=&file_stream; driver=file_drv; Modified: mplayerxp/libmpstream/stream_internal.h =================================================================== --- mplayerxp/libmpstream/stream_internal.h 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/stream_internal.h 2012-12-08 07:53:03 UTC (rev 519) @@ -10,7 +10,7 @@ /** Stream-driver interface */ class Stream_Interface : public Opaque { public: - Stream_Interface() {} + Stream_Interface(libinput_t*) {} virtual ~Stream_Interface() {} /** Opens stream with given name * @param libinput points libinput2 @@ -18,7 +18,7 @@ * @param filename points MRL of stream (vcdnav://, file://, http://, ...) * @param flags currently unused and filled as 0 **/ - virtual MPXP_Rc open(libinput_t* libinput,const char *filename,unsigned flags) = 0; + virtual MPXP_Rc open(const char *filename,unsigned flags) = 0; /** Reads next packet from stream * @param _this points structure which identifies stream @@ -66,7 +66,7 @@ struct stream_interface_info_t { const char* mrl; /**< MRL of stream driver */ const char* descr; /**< description of the driver */ - Stream_Interface* (*query_interface)(); + Stream_Interface* (*query_interface)(libinput_t*); }; } // namespace mpxp #endif Modified: mplayerxp/libmpstream/tcp.cpp =================================================================== --- mplayerxp/libmpstream/tcp.cpp 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/tcp.cpp 2012-12-08 07:53:03 UTC (rev 519) @@ -51,7 +51,7 @@ // return -2 for fatal error, like unable to resolve name, connection timeout... // return -1 is unable to connect to a particular port -void Tcp::open(libinput_t* libinput,const char *host, int port, tcp_af_e af) { +void Tcp::open(const char *host, int port, tcp_af_e af) { socklen_t err_len; int ret,count = 0; fd_set set; @@ -224,16 +224,18 @@ } } -Tcp::Tcp(libinput_t* libinput,const char *host,int port,tcp_af_e af) +Tcp::Tcp(libinput_t* _libinput,const char *host,int port,tcp_af_e af) :_fd(-1), - _error(Tcp::Err_None) + _error(Tcp::Err_None), + libinput(_libinput) { - open(libinput,host,port,af); + open(host,port,af); } -Tcp::Tcp(net_fd_t fd) +Tcp::Tcp(libinput_t* _libinput,net_fd_t fd) :_fd(fd), - _error(Tcp::Err_None) + _error(Tcp::Err_None), + libinput(_libinput) { } Modified: mplayerxp/libmpstream/tcp.h =================================================================== --- mplayerxp/libmpstream/tcp.h 2012-12-07 17:50:52 UTC (rev 518) +++ mplayerxp/libmpstream/tcp.h 2012-12-08 07:53:03 UTC (rev 519) @@ -38,7 +38,7 @@ Err_Port =-1, /* unable to connect to a particular port */ Err_None =0 /* no error */ }; - Tcp(net_fd_t fd); + Tcp(libinput_t* libinput,net_fd_t fd); Tcp(libinput_t* libinput,const char *host,int port,tcp_af_e af=Tcp::IP4); virtual ~Tcp(); @@ -49,13 +49,14 @@ virtual int has_data(int timeout) const; virtual tcp_error_e error() const; - virtual void open(libinput_t* libinput,const char *host,int port,tcp_af_e af=Tcp::IP4); + 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); virtual int write(const uint8_t* buf,unsigned len,int flags=0) const; virtual void close(); private: net_fd_t _fd; tcp_error_e _error; + libinput_t* libinput; }; } // namespace mpxp #endif /* TCP_H */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-07 17:51:03
|
Revision: 518 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=518&view=rev Author: nickols_k Date: 2012-12-07 17:50:52 +0000 (Fri, 07 Dec 2012) Log Message: ----------- convert struct stream_t into Stream Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/dump.h mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.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_rawaudio.cpp mplayerxp/libmpdemux/demux_rawvideo.cpp mplayerxp/libmpdemux/demux_real.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demux_vqf.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer.h mplayerxp/libmpdemux/demuxer_stream.cpp mplayerxp/libmpdemux/demuxer_stream.h mplayerxp/libmpdemux/parse_mp4.cpp mplayerxp/libmpdemux/yuv4mpeg.cpp mplayerxp/libmpdemux/yuv4mpeg.h mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_lavc.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_null.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/stream_internal.h mplayerxp/libmpsub/vobsub.cpp mplayerxp/libplaytree/asxparser.cpp mplayerxp/libplaytree/playtree.h mplayerxp/libplaytree/playtreeparser.cpp mplayerxp/libplaytree/playtreeparser.h mplayerxp/mplayerxp.cpp Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/dump.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -36,7 +36,7 @@ return type; } -void dump_stream(stream_t *stream) +void dump_stream(Stream *stream) { char buf[4096]; int len; @@ -92,7 +92,7 @@ libinput_t* libinput; }; -void __FASTCALL__ dump_stream_event_handler(stream_t *s,const stream_packet_t*sp) +void __FASTCALL__ dump_stream_event_handler(Stream *s,const stream_packet_t*sp) { } Modified: mplayerxp/dump.h =================================================================== --- mplayerxp/dump.h 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/dump.h 2012-12-07 17:50:52 UTC (rev 518) @@ -6,10 +6,10 @@ #include "libmpdemux/demuxer_r.h" namespace mpxp { int dump_parse(const char *param); - void dump_stream(stream_t *stream); + void dump_stream(Stream *stream); void dump_mux_init(Demuxer *demuxer,libinput_t*libinput); void dump_mux(Demuxer *demuxer,int use_pts,const char *seek_to_sec,unsigned play_n_frames); void dump_mux_close(Demuxer *demuxer); - void __FASTCALL__ dump_stream_event_handler(stream_t *s,const stream_packet_t*sp); + void __FASTCALL__ dump_stream_event_handler(Stream *s,const stream_packet_t*sp); } //namespace #endif Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -43,7 +43,7 @@ static MPXP_Rc aiff_probe(Demuxer* demuxer) { char buf[12]; - stream_t *s; + Stream *s; s = demuxer->stream; stream_read(s,buf,12); if(*((uint32_t *)&buf[0])==mmioFOURCC('F','O','R','M') && *((uint32_t *)&buf[8])==mmioFOURCC('A','I','F','F')) return MPXP_Ok; @@ -54,7 +54,7 @@ static Opaque* aiff_open(Demuxer* demuxer) { sh_audio_t* sh_audio; WAVEFORMATEX* w; - stream_t *s; + Stream *s; priv_t *priv; char preamble[8]; s = demuxer->stream; @@ -205,7 +205,7 @@ } static void aiff_seek(Demuxer *demuxer,const seek_args_t* seeka){ - stream_t* s = demuxer->stream; + Stream* s = demuxer->stream; sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); off_t base,pos; Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -502,7 +502,7 @@ // 0 = EOF or no stream found // 1 = successfully read a packet static int asf_demux(Demuxer *demux,Demuxer_Stream *ds){ -stream_t *stream=demux->stream; +Stream *stream=demux->stream; asf_priv_t *apriv=static_cast<asf_priv_t*>(demux->priv); int done=0; while(!done) Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -431,7 +431,7 @@ static int read_mp3v1_tags(Demuxer *demuxer,uint8_t *hdr, off_t pos ) { unsigned n; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; for(n = 0; n < 5 ; n++) { MSG_DBG2("read_mp3v1_tags\n"); pos = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL); @@ -486,7 +486,7 @@ { uint8_t b[8]; unsigned n; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; demuxer->movi_end = s->end_pos(); memcpy(b,hdr,4); stream_seek(s,pos+4); @@ -510,7 +510,7 @@ { uint8_t b[12]; unsigned n; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; demuxer->movi_end = s->end_pos(); memcpy(b,hdr,4); stream_seek(s,pos+4); @@ -548,7 +548,7 @@ static int read_id3v22_tags(Demuxer *demuxer,unsigned flags,unsigned hsize) { off_t pos,epos; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; if( flags==ID3V22_ZERO_FLAG || flags==ID3V22_UNSYNCH_FLAG || flags==ID3V22_COMPRESS_FLAG) return 0; @@ -613,7 +613,7 @@ static int read_id3v23_tags(Demuxer *demuxer,unsigned flags,unsigned hsize) { off_t pos,epos; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; if( flags==ID3V23_ZERO_FLAG || flags==ID3V23_UNSYNCH_FLAG) return 0; if( flags==ID3V23_EXT_HEADER_FLAG ) @@ -689,7 +689,7 @@ static int read_id3v24_tags(Demuxer *demuxer,unsigned flags,unsigned hsize) { off_t pos,epos; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; if( flags==ID3V24_ZERO_FLAG || flags==ID3V24_UNSYNCH_FLAG) return 0; if( flags==ID3V24_EXT_HEADER_FLAG ) @@ -744,7 +744,7 @@ static int read_id3v2_tags(Demuxer *demuxer) { char buf[4]; - stream_t* s=demuxer->stream; + Stream* s=demuxer->stream; unsigned vers,rev,flags,hsize; stream_seek(s,3); /* skip 'ID3' */ vers=stream_read_char(s); @@ -767,7 +767,7 @@ int retval=0; uint32_t fcc,fcc1,fmt; uint8_t *p,b[32]; - stream_t *s; + Stream *s; *brate=*samplerate=*channels=0; s = demuxer->stream; stream_seek(s,fptr); @@ -803,7 +803,7 @@ static MPXP_Rc audio_probe(Demuxer* demuxer) { uint32_t fcc1,fcc2; - stream_t *s; + Stream *s; uint8_t *p; s = demuxer->stream; fcc1=stream_read_dword(s); @@ -829,7 +829,7 @@ #define FRAMES_AND_BYTES (FRAMES_FLAG | BYTES_FLAG) #define MPG_MD_MONO 3 -static void Xing_test(stream_t *s,uint8_t *hdr,da_priv_t *priv) +static void Xing_test(Stream *s,uint8_t *hdr,da_priv_t *priv) { off_t fpos; unsigned mpeg1, mode, sr_index; @@ -865,7 +865,7 @@ extern const demuxer_driver_t demux_audio; static Opaque* audio_open(Demuxer* demuxer) { - stream_t *s; + Stream *s; sh_audio_t* sh_audio; uint8_t hdr[HDR_SIZE]; uint32_t fcc,fcc2; @@ -1375,7 +1375,7 @@ return priv; } -static uint32_t mpc_get_bits(da_priv_t* priv, stream_t* s, int bits) { +static uint32_t mpc_get_bits(da_priv_t* priv, Stream* s, int bits) { uint32_t out = priv->dword; uint32_t mask = (1 << bits) - 1; priv->pos += bits; @@ -1398,7 +1398,7 @@ sh_audio_t* sh_audio; Demuxer* demux; da_priv_t* priv; - stream_t* s; + Stream* s; int frmt,seof; #ifdef MP_DEBUG assert(ds != NULL); @@ -1552,7 +1552,7 @@ s = demux->stream; sh_audio = reinterpret_cast<sh_audio_t*>(ds->sh); - if (s->eof) return 0; + if (s->eof()) return 0; bit_len = mpc_get_bits(priv, s, 20); Demuxer_Packet* dp=new(zeromem) Demuxer_Packet((bit_len + 7) / 8); @@ -1644,7 +1644,7 @@ static void audio_seek(Demuxer *demuxer,const seek_args_t* seeka){ sh_audio_t* sh_audio; - stream_t* s; + Stream* s; int base,pos,frmt; float len; da_priv_t* priv; @@ -1672,7 +1672,7 @@ } mpc_get_bits(priv, s, bit_len % 32); priv->last_pts += priv->pts_per_packet; - if (s->eof) break; + if (s->eof()) break; } return; } Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -1141,7 +1141,7 @@ demuxer->priv=priv; //---- AVI header: - read_avi_header(demuxer,(demuxer->stream->type()&STREAMTYPE_SEEKABLE)?index_mode:-2); + read_avi_header(demuxer,(demuxer->stream->type()&Stream::Type_Seekable)?index_mode:-2); 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); Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -129,19 +129,19 @@ } static int mpxp_read(any_t*opaque, unsigned char *buf, int size){ - stream_t* stream=reinterpret_cast<stream_t*>(opaque); + Stream* stream=reinterpret_cast<Stream*>(opaque); int ret; if(stream_eof(stream)) //needed? return -1; ret=stream_read(stream, buf, size); - MSG_DBG2("%d=mp_read(%p, %p, %d), eof:%d\n", ret, stream, buf, size, stream->eof); + MSG_DBG2("%d=mp_read(%p, %p, %d), eof:%d\n", ret, stream, buf, size, stream->eof()); return ret; } static int64_t mpxp_seek(any_t*opaque, int64_t pos, int whence){ - stream_t* stream=reinterpret_cast<stream_t*>(opaque); + Stream* stream=reinterpret_cast<Stream*>(opaque); MSG_DBG2("mpxp_seek(%p, %d, %d)\n", stream, (int)pos, whence); if(whence == SEEK_CUR) pos +=stream_tell(stream); @@ -150,7 +150,7 @@ else if(whence != SEEK_SET) return -1; - if(pos<stream->end_pos() && stream->eof) + if(pos<stream->end_pos() && stream->eof()) stream_reset(stream); if(stream_seek(stream, pos)==0) return -1; Modified: mplayerxp/libmpdemux/demux_mkv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mkv.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_mkv.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -114,7 +114,7 @@ static uint32_t -ebml_read_id (stream_t *s, int *length) +ebml_read_id (Stream *s, int *length) { int i, len_mask = 0x80; uint32_t id; @@ -182,7 +182,7 @@ * Read: element content length. */ static uint64_t -ebml_read_length (stream_t *s, int *length) +ebml_read_length (Stream *s, int *length) { int i, j, num_ffs = 0, len_mask = 0x80; uint64_t len; @@ -211,7 +211,7 @@ * Read the next element as an unsigned int. */ static uint64_t -ebml_read_uint (stream_t *s, uint64_t *length) +ebml_read_uint (Stream *s, uint64_t *length) { uint64_t len, value = 0; int l; @@ -232,7 +232,7 @@ * Read the next element as a signed int. */ static int64_t -ebml_read_int (stream_t *s, uint64_t *length) +ebml_read_int (Stream *s, uint64_t *length) { int64_t value = 0; uint64_t len; @@ -259,7 +259,7 @@ * Read the next element as a float. */ static long double -ebml_read_float (stream_t *s, uint64_t *length) +ebml_read_float (Stream *s, uint64_t *length) { long double value; uint64_t len; @@ -307,7 +307,7 @@ * Read the next element as an ASCII string. */ static char * -ebml_read_ascii (stream_t *s, uint64_t *length) +ebml_read_ascii (Stream *s, uint64_t *length) { uint64_t len; char *str; @@ -334,7 +334,7 @@ * Read the next element as a UTF-8 string. */ static char * -ebml_read_utf8 (stream_t *s, uint64_t *length) +ebml_read_utf8 (Stream *s, uint64_t *length) { return ebml_read_ascii (s, length); } @@ -343,7 +343,7 @@ * Skip the next element. */ static int -ebml_read_skip (stream_t *s, uint64_t *length) +ebml_read_skip (Stream *s, uint64_t *length) { uint64_t len; int l; @@ -364,7 +364,7 @@ * are supposed to be sub-elements which can be read separately. */ static uint32_t -ebml_read_master (stream_t *s, uint64_t *length) +ebml_read_master (Stream *s, uint64_t *length) { uint64_t len; uint32_t id; @@ -387,7 +387,7 @@ * Read an EBML header. */ static char * -ebml_read_header (stream_t *s, int *version) +ebml_read_header (Stream *s, int *version) { uint64_t length, l, num; uint32_t id; @@ -1055,7 +1055,7 @@ demux_mkv_read_info (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t length, l; int il; uint64_t tc_scale = 1000000; @@ -1114,7 +1114,7 @@ static int demux_mkv_read_trackencodings (Demuxer *demuxer, mkv_track_t *track) { - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; mkv_content_encoding_t *ce, e; uint64_t len, length, l; int il, n; @@ -1266,7 +1266,7 @@ static int demux_mkv_read_trackaudio (Demuxer *demuxer, mkv_track_t *track) { - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t len, length, l; int il; @@ -1324,7 +1324,7 @@ static int demux_mkv_read_trackvideo (Demuxer *demuxer, mkv_track_t *track) { - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t len, length, l; int il; @@ -1404,7 +1404,7 @@ demux_mkv_read_trackentry (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; mkv_track_t *track; uint64_t len, length, l; int il; @@ -1585,7 +1585,7 @@ demux_mkv_read_tracks (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t length, l; int il; @@ -1620,7 +1620,7 @@ demux_mkv_read_cues (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t length, l, time, track, pos; off_t off; int i, il; @@ -1736,7 +1736,7 @@ demux_mkv_read_chapters (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t length, l; int il; @@ -1880,7 +1880,7 @@ demux_mkv_read_attachments (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t length, l; int il; @@ -1995,7 +1995,7 @@ demux_mkv_read_seekhead (Demuxer *demuxer) { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t length, l, seek_pos, saved_pos, num; uint32_t seek_id; int i, il, res = 0; @@ -2788,7 +2788,7 @@ static MPXP_Rc mkv_probe(Demuxer *demuxer) { - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; int version; char *str; stream_seek(s, s->start_pos()); @@ -2803,7 +2803,7 @@ static Opaque* mkv_open(Demuxer *demuxer) { - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; mkv_demuxer_t *mkv_d; mkv_track_t *track; int i, version, cont = 0; @@ -3671,7 +3671,7 @@ { UNUSED(ds); mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t l; int il, tmp; @@ -3821,7 +3821,7 @@ mkv_d->free_cached_dps (); if (!(seeka->flags & 2)) /* time in secs */ { - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; int64_t target_timecode = 0, diff, min_diff=0xFFFFFFFFFFFFFFFLL; int i; @@ -3846,7 +3846,7 @@ else stream_seek (s, stream_tell (s) + mkv_d->cluster_size); /* parse all the clusters upto target_filepos */ - while (!s->eof && stream_tell(s) < (off_t) target_filepos) + while (!s->eof() && stream_tell(s) < (off_t) target_filepos) { switch (ebml_read_id (s, &i)) { @@ -3860,7 +3860,7 @@ } ebml_read_skip (s, NULL); } - if (s->eof) + if (s->eof()) stream_reset(s); } @@ -3942,7 +3942,7 @@ else { mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; uint64_t target_filepos; mkv_index_t *_index = NULL; int i; Modified: mplayerxp/libmpdemux/demux_mov.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mov.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_mov.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -1327,7 +1327,7 @@ unsigned char* moov_buf=new unsigned char[moov_sz+16]; int zret; z_stream zstrm; - stream_t* backup; + Stream* backup; if (moov_sz > std::numeric_limits<size_t>::max() - 16) { MSG_ERR( "Invalid cmvd atom size %d\n", moov_sz); Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -79,7 +79,7 @@ int num_mp3audio_packets; }mpg_stat; -static unsigned int read_mpeg_timestamp(stream_t *s,int c){ +static unsigned int read_mpeg_timestamp(Stream *s,int c){ int d,e; unsigned int pts; d=stream_read_word(s); @@ -561,7 +561,7 @@ } if(newpos<demuxer->movi_start){ - if(!(demuxer->stream->type()&STREAMTYPE_PROGRAM)) demuxer->movi_start=0; // for VCD + if(!(demuxer->stream->type()&Stream::Type_Program)) demuxer->movi_start=0; // for VCD if(newpos<demuxer->movi_start) newpos=demuxer->movi_start; } Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -140,7 +140,7 @@ static void mpxpav64_read_indexes(Demuxer *demuxer,unsigned id,uint64_t idx_off) { uint64_t i,fpos,iid; - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; mpxpav64_priv_t *priv=static_cast<mpxpav64_priv_t*>(demuxer->priv); unsigned sid; int is_valid; @@ -185,7 +185,7 @@ static int mpxpav64_read_st64v(Demuxer *demuxer,unsigned hsize,unsigned id){ mpxpav64_priv_t *priv=static_cast<mpxpav64_priv_t*>(demuxer->priv); - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; uint32_t fourcc,fsize; int have_bih=0; sh_video_t *sh=demuxer->new_sh_video(id); @@ -259,7 +259,7 @@ } static int mpxpav64_read_st64a(Demuxer *demuxer,unsigned hsize,unsigned id){ - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; uint32_t fourcc,fsize; int have_wf=0; sh_audio_t *sh=demuxer->new_sh_audio(id); @@ -308,7 +308,7 @@ } static int mpxpav64_read_st64(Demuxer *demuxer,unsigned hsize,unsigned id){ - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; mpxpav64_priv_t *priv=static_cast<mpxpav64_priv_t*>(demuxer->priv); uint64_t idx_off; uint32_t fourcc,hoff; @@ -362,7 +362,7 @@ static void mpxpav64_read_fcnt(Demuxer* demuxer,unsigned fsize) { mpxpav64_priv_t *priv=static_cast<mpxpav64_priv_t*>(demuxer->priv); - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; int64_t hoff; const char * codepage; hoff=stream_tell(s)+fsize; @@ -434,7 +434,7 @@ } static Opaque* mpxpav64_open(Demuxer* demuxer){ - stream_t *s=demuxer->stream; + Stream *s=demuxer->stream; uint64_t id,hsize,t; uint32_t fourcc; uint16_t scount=0; @@ -529,7 +529,7 @@ static int mpxpav64_read_packet(Demuxer *demux,unsigned id,uint64_t len,float pts,int keyframe) { Demuxer_Stream *ds=NULL; - stream_t* s=demux->stream; + Stream* s=demux->stream; if(demux->video->id==-1) if(demux->get_sh_video(id)) @@ -578,7 +578,7 @@ /* DATx|stn|size|pts|stream data of size32 */ static int mpxpav64_demux(Demuxer *demux,Demuxer_Stream *__ds){ - stream_t* s=demux->stream; + Stream* s=demux->stream; mpxpav64_priv_t *priv=static_cast<mpxpav64_priv_t*>(demux->priv); uint8_t flg; char p[8]; @@ -695,7 +695,7 @@ static int mpxpav64_test_seekpoint(Demuxer *demuxer) { - stream_t* s=demuxer->stream; + Stream* s=demuxer->stream; uint64_t len=0; int is_key,nkeys=0; char p[4]; @@ -751,7 +751,7 @@ static int mpxpav64_sync(Demuxer *demuxer) { - stream_t* s=demuxer->stream; + Stream* s=demuxer->stream; char p[4]; off_t rpos,cpos=stream_tell(s); while(!stream_eof(s)) Modified: mplayerxp/libmpdemux/demux_ogg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -592,7 +592,7 @@ /// otherwise try to get at least the final_granulepos static void demux_ogg_scan_stream(Demuxer* demuxer) { ogg_demuxer_t* ogg_d = static_cast<ogg_demuxer_t*>(demuxer->priv); - stream_t *s = demuxer->stream; + Stream *s = demuxer->stream; ogg_sync_state* sync = &ogg_d->sync; ogg_page* page= &ogg_d->page; ogg_stream_state* oss; @@ -635,7 +635,7 @@ if(np <= 0) { // We need more data char* buf = ogg_sync_buffer(sync,BLOCK_SIZE); int len = stream_read(s,buf,BLOCK_SIZE); - if(len == 0 && s->eof) + if(len == 0 && s->eof()) break; ogg_sync_wrote(sync,len); continue; @@ -690,7 +690,7 @@ if(np <= 0) { // We need more data char* buf = ogg_sync_buffer(sync,BLOCK_SIZE); int len = stream_read(s,buf,BLOCK_SIZE); - if(len == 0 && s->eof) { + if(len == 0 && s->eof()) { MSG_ERR("EOF while trying to get the first page !!!!\n"); break; } @@ -743,7 +743,7 @@ /// Open an ogg physical stream static Opaque* ogg_open(Demuxer* demuxer) { ogg_demuxer_t* ogg_d; - stream_t *s; + Stream *s; char* buf; int np,s_no, n_audio = 0, n_video = 0; int audio_id = -1, video_id = -1, text_id = -1; @@ -785,7 +785,7 @@ int len; buf = ogg_sync_buffer(sync,BLOCK_SIZE); len = stream_read(s,buf,BLOCK_SIZE); - if(len == 0 && s->eof) { + if(len == 0 && s->eof()) { goto err_out; } ogg_sync_wrote(sync,len); @@ -1090,7 +1090,7 @@ static int ogg_demux(Demuxer *d,Demuxer_Stream *__ds) { UNUSED(__ds); ogg_demuxer_t* ogg_d; - stream_t *s; + Stream *s; Demuxer_Stream *ds; ogg_sync_state* sync; ogg_stream_state* os; @@ -1131,7 +1131,7 @@ /// We need more data buf = ogg_sync_buffer(sync,BLOCK_SIZE); len = stream_read(s,buf,BLOCK_SIZE); - if(len == 0 && s->eof) { + if(len == 0 && s->eof()) { MSG_DBG2("Ogg : Stream EOF !!!!\n"); return 0; } @@ -1274,7 +1274,7 @@ if(np <= 0) { // We need more data char* buf = ogg_sync_buffer(sync,BLOCK_SIZE); int len = stream_read(demuxer->stream,buf,BLOCK_SIZE); - if(len == 0 && demuxer->stream->eof) { + if(len == 0 && demuxer->stream->eof()) { MSG_ERR("EOF while trying to seek !!!!\n"); break; } Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -36,7 +36,7 @@ static MPXP_Rc rawaudio_probe(Demuxer* demuxer) { - if(demuxer->stream->type() & STREAMTYPE_RAWAUDIO || use_rawaudio) { + if(demuxer->stream->type() & Stream::Type_RawAudio || use_rawaudio) { demuxer->file_format=Demuxer::Type_RAWAUDIO; return MPXP_Ok; } @@ -71,7 +71,7 @@ demuxer->audio->sh = sh_audio; demuxer->audio->id = 0; sh_audio->ds = demuxer->audio; - if(!(demuxer->stream->type() & STREAMTYPE_SEEKABLE)) demuxer->flags &= ~Demuxer::Seekable; + if(!(demuxer->stream->type() & Stream::Type_Seekable)) demuxer->flags &= ~Demuxer::Seekable; check_pin("demuxer",demuxer->pin,DEMUX_PIN); return demuxer; } @@ -96,7 +96,7 @@ } static void rawaudio_seek(Demuxer *demuxer,const seek_args_t* seeka){ - stream_t* s = demuxer->stream; + Stream* s = demuxer->stream; sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); off_t base,pos; Modified: mplayerxp/libmpdemux/demux_rawvideo.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -60,7 +60,7 @@ static MPXP_Rc rawvideo_probe(Demuxer* demuxer) { - if(demuxer->stream->type() & STREAMTYPE_RAWVIDEO || priv.use_rawvideo) { + if(demuxer->stream->type() & Stream::Type_RawVideo || priv.use_rawvideo) { priv.fps=25; demuxer->file_format=Demuxer::Type_RAWVIDEO; return MPXP_Ok; @@ -131,7 +131,7 @@ } static void rawvideo_seek(Demuxer *demuxer,const seek_args_t* seeka){ - stream_t* s = demuxer->stream; + Stream* s = demuxer->stream; off_t pos; pos =(seeka->flags & DEMUX_SEEK_SET)?demuxer->movi_start:stream_tell(s); Modified: mplayerxp/libmpdemux/demux_real.cpp =================================================================== --- mplayerxp/libmpdemux/demux_real.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_real.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -452,7 +452,7 @@ len = stream_read_word(demuxer->stream); } else if ((version == 0x494e) && (len == 0x4458)) { MSG_V("demux_real: Found INDX chunk. EOF.\n"); - demuxer->stream->eof=1; + demuxer->stream->eof(1); return 0; } Modified: mplayerxp/libmpdemux/demux_ts.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ts.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_ts.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -392,7 +392,7 @@ while(((c=stream_read_char(demuxer->stream)) != 0x47) && (c >= 0) && (i < MAX_CHECK_SIZE) - && ! demuxer->stream->eof + && ! demuxer->stream->eof() ) i++; @@ -652,7 +652,7 @@ while(1) { pos = stream_tell(demuxer->stream); - if(pos > end_pos || demuxer->stream->eof) + if(pos > end_pos || demuxer->stream->eof()) break; if(ts_parse(demuxer, &es, tmp, 1)) @@ -883,7 +883,7 @@ if(video_found || audio_found) { - if(demuxer->stream->eof && (ret == 0)) + if(demuxer->stream->eof() && (ret == 0)) ret = init_pos; MSG_INFO( " PROGRAM N. %d\n", param->prog); } @@ -1484,13 +1484,13 @@ -static int ts_sync(stream_t *stream) +static int ts_sync(Stream *stream) { int c=0; MSG_DBG2( "TS_SYNC \n"); - while(((c=stream_read_char(stream)) != 0x47) && ! stream->eof); + while(((c=stream_read_char(stream)) != 0x47) && ! stream->eof()); if(c == 0x47) return c; @@ -2588,7 +2588,7 @@ int buf_size, is_start, pid, base; int len, cc, cc_ok, afc, retv = 0, is_video, is_audio, is_sub; ts_priv_t * priv = static_cast<ts_priv_t*>(demuxer->priv); - stream_t *stream = demuxer->stream; + Stream *stream = demuxer->stream; unsigned char *p; Demuxer_Stream *ds = NULL; Demuxer_Packet **dp = NULL; Modified: mplayerxp/libmpdemux/demux_ty.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ty.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_ty.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -122,7 +122,7 @@ stream_seek(demux->stream, 0); MSG_DBG3("Dumping tar contents\n" ); - while (!demux->stream->eof) + while (!demux->stream->eof()) { char header[ 512 ]; char *name; @@ -360,7 +360,7 @@ #endif MSG_DBG3( "ty:ty processing\n" ); - if( demux->stream->eof ) return 0; + if( demux->stream->eof()) return 0; // ====================================================================== // If we haven't figured out the size of the stream, let's do so @@ -465,7 +465,7 @@ if ( tivo->size > 0 && stream_tell( demux->stream ) > tivo->size ) { - demux->stream->eof = 1; + demux->stream->eof(1); return 0; } Modified: mplayerxp/libmpdemux/demux_vqf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_vqf.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demux_vqf.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -42,7 +42,7 @@ static MPXP_Rc vqf_probe(Demuxer* demuxer) { char buf[12]; - stream_t *s; + Stream *s; s = demuxer->stream; stream_read(s,buf,12); if(memcmp(buf,"TWIN",4)==0) return MPXP_Ok; /*version: 97012000*/ @@ -52,7 +52,7 @@ static Opaque* vqf_open(Demuxer* demuxer) { sh_audio_t* sh_audio; WAVEFORMATEX* w; - stream_t *s; + Stream *s; headerInfo *hi; s = demuxer->stream; @@ -210,7 +210,7 @@ } static void vqf_seek(Demuxer *demuxer,const seek_args_t* seeka){ - stream_t* s = demuxer->stream; + Stream* s = demuxer->stream; sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); off_t base,pos; Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -114,7 +114,7 @@ } } -void Demuxer::_init(stream_t *_stream,int a_id,int v_id,int s_id) +void Demuxer::_init(Stream *_stream,int a_id,int v_id,int s_id) { stream=_stream; movi_start=_stream->start_pos(); @@ -138,7 +138,7 @@ pin=DEMUX_PIN; } -Demuxer::Demuxer(stream_t *_stream,int a_id,int v_id,int s_id) +Demuxer::Demuxer(Stream *_stream,int a_id,int v_id,int s_id) :demuxer_priv(new(zeromem) demuxer_priv_t), _info(new(zeromem) Demuxer_Info) { @@ -364,8 +364,8 @@ return MPXP_Ok; } -Demuxer* Demuxer::open(stream_t *vs,int audio_id,int video_id,int dvdsub_id){ - stream_t *as = NULL,*ss = NULL; +Demuxer* Demuxer::open(Stream *vs,int audio_id,int video_id,int dvdsub_id){ + Stream *as = NULL,*ss = NULL; Demuxer *vd,*ad = NULL,*sd = NULL; int afmt = 0,sfmt = 0; libinput_t* libinput=NULL; @@ -374,16 +374,18 @@ #endif if(demux_conf.audio_stream) { - as = open_stream(libinput,demux_conf.audio_stream,&afmt,NULL); - if(!as) { + as = new(zeromem) Stream(); + if(as->open(libinput,demux_conf.audio_stream,&afmt,NULL)!=MPXP_Ok) { MSG_ERR("Can't open audio stream: %s\n",demux_conf.audio_stream); + delete as; return NULL; } } if(demux_conf.sub_stream) { - ss = open_stream(libinput,demux_conf.sub_stream,&sfmt,NULL); - if(!ss) { + ss = new(zeromem) Stream(); + if(ss->open(libinput,demux_conf.sub_stream,&sfmt,NULL)!=MPXP_Ok) { MSG_ERR("Can't open subtitles stream: %s\n",demux_conf.sub_stream); + delete ss; return NULL; } } @@ -423,7 +425,7 @@ 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)) + if(!(stream->type()&Stream::Type_Seekable)) { MSG_WARN("Stream is not seekable\n"); return 0; Modified: mplayerxp/libmpdemux/demuxer.h =================================================================== --- mplayerxp/libmpdemux/demuxer.h 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demuxer.h 2012-12-07 17:50:52 UTC (rev 518) @@ -48,7 +48,7 @@ struct Demuxer : public Opaque { public: Demuxer(); - Demuxer(stream_t *stream,int a_id,int v_id,int s_id); + Demuxer(Stream *stream,int a_id,int v_id,int s_id); virtual ~Demuxer(); enum demuxer_type_e { @@ -101,7 +101,7 @@ Switch_Subs =3 }; - static Demuxer* open(stream_t *stream,int aid,int vid,int sid); + static Demuxer* open(Stream* stream,int aid,int vid,int sid); virtual MPXP_Rc open(); virtual int demux(Demuxer_Stream* ds); @@ -126,7 +126,7 @@ char antiviral_hole[RND_CHAR3]; unsigned pin; /**< personal identification number */ - stream_t* stream; /**< stream for movie reading */ + Stream* stream; /**< stream for movie reading */ Demuxer_Stream* audio; /**< audio buffer/demuxer */ Demuxer_Stream* video; /**< video buffer/demuxer */ Demuxer_Stream* sub; /**< DVD's subtitle buffer/demuxer */ @@ -139,7 +139,7 @@ int synced; /**< indicates stream synchronisation. TODO: mpg->priv */ Opaque* priv; /**< private data of demuxer's driver.*/ private: - void _init(stream_t *_stream,int a_id,int v_id,int s_id); + void _init(Stream *_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)*/ @@ -153,7 +153,7 @@ 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))); } // This is defined here because demux_stream_t ins't defined in stream.h - stream_t* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds); + Stream* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds); Demuxer* new_demuxers_demuxer(Demuxer* vd, Demuxer* ad, Demuxer* sd); }// namespace mpxp #endif Modified: mplayerxp/libmpdemux/demuxer_stream.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_stream.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demuxer_stream.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -77,7 +77,7 @@ 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){ +void Demuxer_Stream::read_packet(Stream *stream,int len,float _pts,off_t _pos,dp_flags_e _flags){ Demuxer_Packet* dp=new(zeromem) Demuxer_Packet(len); len=stream_read(stream,dp->buffer(),len); dp->resize(len); Modified: mplayerxp/libmpdemux/demuxer_stream.h =================================================================== --- mplayerxp/libmpdemux/demuxer_stream.h 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/demuxer_stream.h 2012-12-07 17:50:52 UTC (rev 518) @@ -9,14 +9,14 @@ namespace mpxp { struct Demuxer; - struct stream_t; + struct Stream; class Demuxer_Stream : public Opaque { public: Demuxer_Stream(Demuxer *demuxer,int id); virtual ~Demuxer_Stream(); void add_packet(Demuxer_Packet* dp); - void read_packet(stream_t *stream,int len,float pts,off_t pos,dp_flags_e flags); + void read_packet(Stream *stream,int len,float pts,off_t pos,dp_flags_e flags); int read_data(unsigned char* mem,int len); void free_packs(); void free_packs_until_pts(float pts); Modified: mplayerxp/libmpdemux/parse_mp4.cpp =================================================================== --- mplayerxp/libmpdemux/parse_mp4.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/parse_mp4.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -18,7 +18,7 @@ #define freereturn(a,b) delete a; return b -int mp4_read_descr_len(stream_t *s) { +int mp4_read_descr_len(Stream *s) { uint8_t b; uint8_t numBytes = 0; uint32_t length = 0; @@ -35,7 +35,7 @@ /* parse the data part of MP4 esds atoms */ int mp4_parse_esds(unsigned char *data, int datalen, esds_t *esds) { /* create memory stream from data */ - stream_t *s = new_memory_stream(data, datalen); + Stream *s = new_memory_stream(data, datalen); uint8_t len; #ifdef MP4_DUMPATOM {int i; Modified: mplayerxp/libmpdemux/yuv4mpeg.cpp =================================================================== --- mplayerxp/libmpdemux/yuv4mpeg.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/yuv4mpeg.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -65,7 +65,7 @@ *************************************************************************/ -ssize_t y4m_read(stream_t *s, char *buf, size_t len) +ssize_t y4m_read(Stream *s, char *buf, size_t len) { ssize_t n; @@ -458,7 +458,7 @@ *************************************************************************/ -int y4m_read_stream_header(stream_t *s, y4m_stream_info_t *i) +int y4m_read_stream_header(Stream *s, y4m_stream_info_t *i) { char line[Y4M_LINE_MAX]; char *p; @@ -523,7 +523,7 @@ * *************************************************************************/ -int y4m_read_frame_header(stream_t *s, y4m_frame_info_t *i) +int y4m_read_frame_header(Stream *s, y4m_frame_info_t *i) { char line[Y4M_LINE_MAX]; char *p; @@ -592,7 +592,7 @@ * *************************************************************************/ -int y4m_read_frame(stream_t *s, y4m_stream_info_t *si, +int y4m_read_frame(Stream *s, y4m_stream_info_t *si, y4m_frame_info_t *fi, unsigned char *yuv[3]) { int err; Modified: mplayerxp/libmpdemux/yuv4mpeg.h =================================================================== --- mplayerxp/libmpdemux/yuv4mpeg.h 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpdemux/yuv4mpeg.h 2012-12-07 17:50:52 UTC (rev 518) @@ -270,7 +270,7 @@ ************************************************************************/ /* read len bytes from fd into buf */ -ssize_t y4m_read(stream_t *s, char *buf, size_t len); +ssize_t y4m_read(Stream *s, char *buf, size_t len); #if 0 /* write len bytes from fd into buf */ @@ -291,7 +291,7 @@ int y4m_parse_stream_tags(char *s, y4m_stream_info_t *i); /* read a stream header from file descriptor fd */ -int y4m_read_stream_header(stream_t *s, y4m_stream_info_t *i); +int y4m_read_stream_header(Stream *s, y4m_stream_info_t *i); #if 0 /* write a stream header to file descriptor fd */ @@ -309,7 +309,7 @@ ************************************************************************/ /* read a frame header from file descriptor fd */ -int y4m_read_frame_header(stream_t *s, y4m_frame_info_t *i); +int y4m_read_frame_header(Stream *s, y4m_frame_info_t *i); #if 0 /* write a frame header to file descriptor fd */ @@ -318,7 +318,7 @@ /* read a complete frame (header + data) o yuv[3] points to three buffers, one each for Y, U, V planes */ -int y4m_read_frame(stream_t *s, y4m_stream_info_t *si, +int y4m_read_frame(Stream *s, y4m_stream_info_t *si, y4m_frame_info_t *fi, unsigned char *yuv[3]); #if 0 Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -52,7 +52,7 @@ int eof; /* reader's pointers: */ off_t read_filepos; - stream_t* stream; /* parent stream */ + Stream* stream; /* parent stream */ /* thread related stuff */ int in_fill; pthread_mutex_t mutex; @@ -107,11 +107,11 @@ new_start = readpos - c->back_size; if(new_start<c->stream->start_pos()) new_start=c->stream->start_pos(); seek_eof=0; - if(!in_cache && c->stream->type()&STREAMTYPE_SEEKABLE) { + if(!in_cache && c->stream->type()&Stream::Type_Seekable) { /* seeking... */ MSG_DBG2("Out of boundaries... seeking to %lli {in_cache(%i) %lli<%lli>%lli} \n" ,new_start,in_cache,START_FILEPOS(c),readpos,END_FILEPOS(c)); - if(c->stream->eof || c->eof) nc_stream_reset(c->stream); + if(c->stream->eof() || c->eof) c->stream->reset(); c->stream->driver->seek(new_start); if(errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver_info->mrl,strerror(errno)); errno=0; } if((c->packets[c->first].filepos=c->stream->driver->tell())<0) seek_eof=1; @@ -267,11 +267,11 @@ return arg; } -int stream_enable_cache(stream_t *stream,libinput_t* libinput,int size,int _min,int prefill){ +int stream_enable_cache(Stream *stream,libinput_t* libinput,int size,int _min,int prefill){ int ss=stream->sector_size()>1?stream->sector_size():STREAM_BUFFER_SIZE; cache_vars_t* c; - if (!(stream->type()&STREAMTYPE_SEEKABLE)) { + if (!(stream->type()&Stream::Type_Seekable)) { // The stream has no 'fd' behind it, so is non-cacheable MSG_WARN("\rThis stream is non-cacheable\n"); return 1; @@ -293,7 +293,7 @@ START_FILEPOS(c),c->read_filepos,END_FILEPOS(c),_min,c->eof,ss); while((c->read_filepos<START_FILEPOS(c) || END_FILEPOS(c)-c->read_filepos<_min) && !c->eof && CP_NEXT(c,c->last)!=c->first){ - if(!(stream->type()&STREAMTYPE_SEEKABLE)) + if(!(stream->type()&Stream::Type_Seekable)) MSG_STATUS("\rCache fill: %5.2f%% (%d bytes) ", 100.0*(float)(END_FILEPOS(c)-c->read_filepos)/(float)(c->buffer_size), END_FILEPOS(c)-c->read_filepos); @@ -309,7 +309,7 @@ return 1; // parent exits } -void stream_disable_cache(stream_t *st) +void stream_disable_cache(Stream *st) { cache_vars_t* c; c=st->cache_data; @@ -343,7 +343,7 @@ unsigned cidx; int was_eof; MSG_DBG2("c2_stream_reset\n"); - nc_stream_reset(c->stream); + c->stream->reset(); cidx=c->first; was_eof=0; do{ was_eof |= (c->packets[cidx].state&CPF_EOF); c->packets[cidx].state&=~CPF_EOF; cidx=CP_NEXT(c,cidx); }while(cidx!=c->first); @@ -567,30 +567,30 @@ /* main interface here! */ -int __FASTCALL__ stream_read(stream_t *s,any_t* _mem,int total) +int __FASTCALL__ stream_read(Stream *s,any_t* _mem,int total) { char *mem = reinterpret_cast<char*>(_mem); if(s->cache_data) return c2_stream_read(s->cache_data,mem,total); else return nc_stream_read(s,mem,total); } -int __FASTCALL__ stream_eof(stream_t *s) +int __FASTCALL__ stream_eof(Stream *s) { if(s->cache_data) return c2_stream_eof(s->cache_data); - else return s->eof; + else return s->eof(); } -void __FASTCALL__ stream_set_eof(stream_t *s,int eof) +void __FASTCALL__ stream_set_eof(Stream *s,int eof) { if(!eof) stream_reset(s); else { if(s->cache_data) c2_stream_set_eof(s->cache_data,eof); - else s->eof=eof; + else s->eof(eof); } } -int __FASTCALL__ stream_read_char(stream_t *s) +int __FASTCALL__ stream_read_char(Stream *s) { if(s->cache_data) { @@ -601,72 +601,72 @@ else return nc_stream_read_char(s); } -off_t __FASTCALL__ stream_tell(stream_t *s) +off_t __FASTCALL__ stream_tell(Stream *s) { if(s->cache_data) return c2_stream_tell(s->cache_data); else return nc_stream_tell(s); } -int __FASTCALL__ stream_seek(stream_t *s,off_t pos) +int __FASTCALL__ stream_seek(Stream *s,off_t pos) { if(s->cache_data) return c2_stream_seek(s->cache_data,pos); else return nc_stream_seek(s,pos); } -int __FASTCALL__ stream_skip(stream_t *s,off_t len) +int __FASTCALL__ stream_skip(Stream *s,off_t len) { if(s->cache_data) return c2_stream_skip(s->cache_data,len); else return nc_stream_skip(s,len); } -MPXP_Rc __FASTCALL__ stream_control(const stream_t *s,unsigned cmd,any_t*param) +MPXP_Rc __FASTCALL__ stream_control(const Stream *s,unsigned cmd,any_t*param) { return nc_stream_control(s,cmd,param); } -void __FASTCALL__ stream_reset(stream_t *s) +void __FASTCALL__ stream_reset(Stream *s) { if(s->cache_data) c2_stream_reset(s->cache_data); - else nc_stream_reset(s); + else s->reset(); } -unsigned int __FASTCALL__ stream_read_word(stream_t *s){ +unsigned int __FASTCALL__ stream_read_word(Stream *s){ unsigned short retval; stream_read(s,(char *)&retval,2); return me2be_16(retval); } -unsigned int __FASTCALL__ stream_read_dword(stream_t *s){ +unsigned int __FASTCALL__ stream_read_dword(Stream *s){ unsigned int retval; stream_read(s,(char *)&retval,4); return me2be_32(retval); } -uint64_t __FASTCALL__ stream_read_qword(stream_t *s){ +uint64_t __FASTCALL__ stream_read_qword(Stream *s){ uint64_t retval; stream_read(s,(char *)&retval,8); return me2be_64(retval); } -unsigned int __FASTCALL__ stream_read_word_le(stream_t *s){ +unsigned int __FASTCALL__ stream_read_word_le(Stream *s){ unsigned short retval; stream_read(s,(char *)&retval,2); return me2le_16(retval); } -unsigned int __FASTCALL__ stream_read_dword_le(stream_t *s){ +unsigned int __FASTCALL__ stream_read_dword_le(Stream *s){ unsigned int retval; stream_read(s,(char *)&retval,4); return me2le_32(retval); } -uint64_t __FASTCALL__ stream_read_qword_le(stream_t *s){ +uint64_t __FASTCALL__ stream_read_qword_le(Stream *s){ uint64_t retval; stream_read(s,(char *)&retval,8); return me2le_64(retval); } -unsigned int __FASTCALL__ stream_read_int24(stream_t *s){ +unsigned int __FASTCALL__ stream_read_int24(Stream *s){ unsigned int y; y = stream_read_char(s); y=(y<<8)|stream_read_char(s); Modified: mplayerxp/libmpstream/cddb.cpp =================================================================== --- mplayerxp/libmpstream/cddb.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/cddb.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -494,7 +494,7 @@ } user_name = getenv("LOGNAME"); } - sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayerXP", VERSION ); + sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s", user_name, host_name, "MPlayerXP"); } int __FASTCALL__ cddb_retrieve(cddb_data_t *cddb_data) { Modified: mplayerxp/libmpstream/network.h =================================================================== --- mplayerxp/libmpstream/network.h 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/network.h 2012-12-07 17:50:52 UTC (rev 518) @@ -26,7 +26,7 @@ #define BUFFER_SIZE 2048 namespace mpxp { - struct stream_t; + struct Stream; struct libinput_t; class Tcp; } Modified: mplayerxp/libmpstream/s_cdd.cpp =================================================================== --- mplayerxp/libmpstream/s_cdd.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_cdd.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -29,7 +29,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t start_pos() const; virtual off_t size() const; virtual off_t sector_size() const; @@ -58,7 +58,7 @@ return priv?MPXP_Ok:MPXP_False; } -stream_type_e Cdda_Stream_Interface::type() const { return STREAMTYPE_RAWAUDIO|STREAMTYPE_SEEKABLE; } +Stream::type_e Cdda_Stream_Interface::type() const { return Stream::Type_RawAudio|Stream::Type_Seekable; } off_t Cdda_Stream_Interface::start_pos() const { return cdda_start(priv); } off_t Cdda_Stream_Interface::size() const { return cdda_size(priv); } off_t Cdda_Stream_Interface::sector_size() const { return CD_FRAMESIZE_RAW; } Modified: mplayerxp/libmpstream/s_dvdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_dvdnav.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -59,7 +59,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t start_pos() const; virtual off_t size() const; virtual off_t sector_size() const; @@ -228,11 +228,11 @@ } return MPXP_Ok; } -stream_type_e DvdNav_Stream_Interface::type() const { +Stream::type_e DvdNav_Stream_Interface::type() const { if( dvdnav_is_domain_vmgm(dvdnav) || dvdnav_is_domain_vtsm(dvdnav) || menu_mode ) - return STREAMTYPE_MENU|STREAMTYPE_SEEKABLE; - return STREAMTYPE_SEEKABLE|STREAMTYPE_PROGRAM; + return Stream::Type_Menu|Stream::Type_Seekable; + return Stream::Type_Seekable|Stream::Type_Program; } off_t DvdNav_Stream_Interface::start_pos() const { return cpos; } off_t DvdNav_Stream_Interface::size() const { return -1; } Modified: mplayerxp/libmpstream/s_dvdread.cpp =================================================================== --- mplayerxp/libmpstream/s_dvdread.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_dvdread.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -60,7 +60,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t start_pos() const; virtual off_t size() const; virtual off_t sector_size() const; @@ -712,7 +712,7 @@ spos=0; return MPXP_Ok; } -stream_type_e DvdRead_Stream_Interface::type() const { return STREAMTYPE_SEEKABLE|STREAMTYPE_PROGRAM; } +Stream::type_e DvdRead_Stream_Interface::type() const { return Stream::Type_Seekable|Stream::Type_Program; } off_t DvdRead_Stream_Interface::start_pos() const { return (off_t)cur_pack*2048; } off_t DvdRead_Stream_Interface::size() const { return _end_pos; } off_t DvdRead_Stream_Interface::sector_size() const { return 2048; } Modified: mplayerxp/libmpstream/s_file.cpp =================================================================== --- mplayerxp/libmpstream/s_file.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_file.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -31,7 +31,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -64,7 +64,7 @@ return MPXP_Ok; } -stream_type_e File_Stream_Interface::type() const { return (end_pos==-1)?STREAMTYPE_STREAM:STREAMTYPE_SEEKABLE; } +Stream::type_e File_Stream_Interface::type() const { return (end_pos==-1)?Stream::Type_Stream:Stream::Type_Seekable; } off_t File_Stream_Interface::size() const { return end_pos; } off_t File_Stream_Interface::sector_size() const { return STREAM_BUFFER_SIZE; } Modified: mplayerxp/libmpstream/s_ftp.cpp =================================================================== --- mplayerxp/libmpstream/s_ftp.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_ftp.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -36,7 +36,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -418,7 +418,7 @@ url_free(url); return MPXP_Ok; } -stream_type_e Ftp_Stream_Interface::type() const { return file_len?STREAMTYPE_SEEKABLE:STREAMTYPE_STREAM; } +Stream::type_e Ftp_Stream_Interface::type() const { return file_len?Stream::Type_Seekable:Stream::Type_Stream; } off_t Ftp_Stream_Interface::size() const { return file_len; } off_t Ftp_Stream_Interface::sector_size() const { return BUFSIZE; } Modified: mplayerxp/libmpstream/s_lavc.cpp =================================================================== --- mplayerxp/libmpstream/s_lavc.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_lavc.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -22,7 +22,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -80,7 +80,7 @@ return MPXP_Ok; } -stream_type_e Lavs_Stream_Interface::type() const { return (ctx->is_streamed)?STREAMTYPE_STREAM:STREAMTYPE_SEEKABLE; } +Stream::type_e Lavs_Stream_Interface::type() const { return (ctx->is_streamed)?Stream::Type_Stream:Stream::Type_Seekable; } off_t Lavs_Stream_Interface::size() const { return end_pos; } off_t Lavs_Stream_Interface::sector_size() const { return STREAM_BUFFER_SIZE; } Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -32,7 +32,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -70,7 +70,7 @@ } return MPXP_False; } -stream_type_e Network_Stream_Interface::type() const { return STREAMTYPE_STREAM; } +Stream::type_e Network_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Network_Stream_Interface::size() const { return 0; } off_t Network_Stream_Interface::sector_size() const { return 1; } Modified: mplayerxp/libmpstream/s_null.cpp =================================================================== --- mplayerxp/libmpstream/s_null.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_null.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -19,7 +19,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; }; @@ -43,7 +43,7 @@ UNUSED(args); return MPXP_Unknown; } -stream_type_e Null_Stream_Interface::type() const { return STREAMTYPE_STREAM; } +Stream::type_e Null_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Null_Stream_Interface::size() const { return 0; } off_t Null_Stream_Interface::sector_size() const { return 0; } Modified: mplayerxp/libmpstream/s_oss.cpp =================================================================== --- mplayerxp/libmpstream/s_oss.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_oss.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -39,7 +39,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -137,7 +137,7 @@ delete args; return MPXP_Ok; } -stream_type_e Oss_Stream_Interface::type() const { return STREAMTYPE_STREAM|STREAMTYPE_RAWAUDIO; } +Stream::type_e Oss_Stream_Interface::type() const { return Stream::Type_Stream|Stream::Type_RawAudio; } off_t Oss_Stream_Interface::size() const { return -1; } off_t Oss_Stream_Interface::sector_size() const { return _sector_size; } Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -38,7 +38,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -162,7 +162,7 @@ fixup_network_stream_cache (networking); return MPXP_Ok; } -stream_type_e Rtsp_Stream_Interface::type() const { return STREAMTYPE_STREAM; } +Stream::type_e Rtsp_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Rtsp_Stream_Interface::size() const { return 0; } off_t Rtsp_Stream_Interface::sector_size() const { return 1; } Modified: mplayerxp/libmpstream/s_tv.cpp =================================================================== --- mplayerxp/libmpstream/s_tv.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_tv.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -590,7 +590,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -661,7 +661,7 @@ return MPXP_Unknown; } -stream_type_e Tv_Stream_Interface::type() const { return STREAMTYPE_STREAM; } +Stream::type_e Tv_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Tv_Stream_Interface::size() const { return -1; } off_t Tv_Stream_Interface::sector_size() const { return 0; } Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -37,7 +37,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t size() const; virtual off_t sector_size() const; private: @@ -115,7 +115,7 @@ fixup_network_stream_cache (networking); return MPXP_Ok; } -stream_type_e Udp_Stream_Interface::type() const { return STREAMTYPE_STREAM; } +Stream::type_e Udp_Stream_Interface::type() const { return Stream::Type_Stream; } off_t Udp_Stream_Interface::size() const { return 0; } off_t Udp_Stream_Interface::sector_size() const { return 1; } Modified: mplayerxp/libmpstream/s_vcdnav.cpp =================================================================== --- mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/s_vcdnav.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -40,7 +40,7 @@ virtual off_t tell() const; virtual void close(); virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); - virtual stream_type_e type() const; + virtual Stream::type_e type() const; virtual off_t start_pos() const; virtual off_t size() const; virtual off_t sector_size() const; @@ -158,7 +158,7 @@ MSG_DBG2("vcdnav_open start=%i end=%i\n",lsn,total); return MPXP_Ok; } -stream_type_e VcdNav_Stream_Interface::type() const { return STREAMTYPE_SEEKABLE|STREAMTYPE_PROGRAM; } +Stream::type_e VcdNav_Stream_Interface::type() const { return Stream::Type_Seekable|Stream::Type_Program; } off_t VcdNav_Stream_Interface::start_pos() const { return start*sizeof(vcdsector_t); } off_t VcdNav_Stream_Interface::size() const { return (start+total)*sizeof(vcdsector_t); } off_t VcdNav_Stream_Interface::sector_size() const { return sizeof(vcdsector_t); } Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-07 16:03:55 UTC (rev 517) +++ mplayerxp/libmpstream/stream.cpp 2012-12-07 17:50:52 UTC (rev 518) @@ -88,24 ... [truncated message content] |
From: <nic...@us...> - 2012-12-07 16:04:06
|
Revision: 517 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=517&view=rev Author: nickols_k Date: 2012-12-07 16:03:55 +0000 (Fri, 07 Dec 2012) Log Message: ----------- more or less accuracies in return codes Modified Paths: -------------- mplayerxp/libmpstream/asf_mmst_streaming.cpp mplayerxp/libmpstream/asf_streaming.cpp mplayerxp/libmpstream/asf_streaming.h mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_udp.cpp Modified: mplayerxp/libmpstream/asf_mmst_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-07 16:03:55 UTC (rev 517) @@ -490,169 +490,161 @@ return -1; } -int asf_mmst_networking_start(Tcp& tcp, networking_t *networking) +MPXP_Rc asf_mmst_networking_start(Tcp& tcp, networking_t *networking) { - char str[1024]; - unsigned char data[BUF_SIZE]; - uint8_t asf_header[HDR_BUF_SIZE]; - int asf_header_len; - int len, i, packet_length; - char *path, *unescpath; - URL_t *url1 = networking->url; + char str[1024]; + uint8_t data[BUF_SIZE]; + uint8_t asf_header[HDR_BUF_SIZE]; + int asf_header_len; + int len, i, packet_length; + char* path, *unescpath; + URL_t* url1 = networking->url; - tcp.close(); + tcp.close(); - /* parse url */ - path = strchr(url1->file,'/') + 1; + /* parse url */ + path = strchr(url1->file,'/') + 1; - /* mmst filename are not url_escaped by MS MediaPlayer and are expected as - * "plain text" by the server, so need to decode it here - */ - unescpath=new char [strlen(path)+1]; - if (!unescpath) { + /* mmst filename are not url_escaped by MS MediaPlayer and are expected as + * "plain text" by the server, so need to decode it here + */ + unescpath=new char [strlen(path)+1]; + if (!unescpath) { MSG_FATAL("Memory allocation failed!\n"); - return -1; - } - url2string(unescpath,path); - path=unescpath; + return MPXP_False; + } + url2string(unescpath,path); + path=unescpath; - if( url1->port==0 ) { - url1->port=1755; - } - tcp.open(networking->libinput, url1->hostname, url1->port, Tcp::IP4); - if( !tcp.established()) { - delete path; - return -1; - } - MSG_INFO ("connected\n"); + if( url1->port==0 ) url1->port=1755; + tcp.open(networking->libinput, url1->hostname, url1->port, Tcp::IP4); + if( !tcp.established()) { + delete path; + return MPXP_False; + } + MSG_INFO ("connected\n"); - seq_num=0; + seq_num=0; - /* - * Send the initial connect info including player version no. Client GUID (random) and the host address being connected to. - * This command is sent at the very start of protocol initiation. It sends local information to the serve - * cmd 1 0x01 - * */ + /* + * Send the initial connect info including player version no. Client GUID (random) and the host address being connected to. + * This command is sent at the very start of protocol initiation. It sends local information to the serve + * cmd 1 0x01 + * */ - /* prepare for the url encoding conversion */ + /* prepare for the url encoding conversion */ #ifdef USE_ICONV #ifdef USE_LANGINFO - url_conv = iconv_open("UTF-16LE",nl_langinfo(CODESET)); + url_conv = iconv_open("UTF-16LE",nl_langinfo(CODESET)); #else - url_conv = iconv_open("UTF-16LE", NULL); + url_conv = iconv_open("UTF-16LE", NULL); #endif #endif - snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname); - string_utf16 (data, str, strlen(str)); + snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname); + string_utf16 (data, str, strlen(str)); // send_command(s, commandno ....) - send_command (tcp, 1, 0, 0x0004000b, strlen(str) * 2+2, data); + send_command (tcp, 1, 0, 0x0004000b, strlen(str) * 2+2, data); - len = tcp.read (data, BUF_SIZE); + len = tcp.read (data, BUF_SIZE); - /*This sends details of the local machine IP address to a Funnel system at the server. - * Also, the TCP or UDP transport selection is sent. - * - * here 192.168.0.129 is local ip address TCP/UDP states the tronsport we r using - * and 1037 is the local TCP or UDP socket number - * cmd 2 0x02 - * */ + /*This sends details of the local machine IP address to a Funnel system at the server. + * Also, the TCP or UDP transport selection is sent. + * + * here 192.168.0.129 is local ip address TCP/UDP states the tronsport we r using + * and 1037 is the local TCP or UDP socket number + * cmd 2 0x02 + * */ - string_utf16 (&data[8], "\002\000\\\\192.168.0.1\\TCP\\1037", 24); - memset (data, 0, 8); - send_command (tcp, 2, 0, 0, 24*2+10, data); + string_utf16 (&data[8], "\002\000\\\\192.168.0.1\\TCP\\1037", 24); + memset (data, 0, 8); + send_command (tcp, 2, 0, 0, 24*2+10, data); - len = tcp.read(data, BUF_SIZE); + len = tcp.read(data, BUF_SIZE); - /* This command sends file path (at server) and file name request to the server. - * 0x5 */ + /* This command sends file path (at server) and file name request to the server. + * 0x5 */ - string_utf16 (&data[8], path, strlen(path)); - memset (data, 0, 8); - send_command (tcp, 5, 0, 0, strlen(path)*2+10, data); - delete path; + string_utf16 (&data[8], path, strlen(path)); + memset (data, 0, 8); + send_command (tcp, 5, 0, 0, strlen(path)*2+10, data); + delete path; - get_answer (tcp); + get_answer (tcp); - /* The ASF header chunk request. Includes ?session' variable for pre header value. - * After this command is sent, - * the server replies with 0x11 command and then the header chunk with header data follows. - * 0x15 */ + /* The ASF header chunk request. Includes ?session' variable for pre header value. + * After this command is sent, + * the server replies with 0x11 command and then the header chunk with header data follows. + * 0x15 */ - memset (data, 0, 40); - data[32] = 2; + memset (data, 0, 40); + data[32] = 2; - send_command (tcp, 0x15, 1, 0, 40, data); + send_command (tcp, 0x15, 1, 0, 40, data); - num_stream_ids = 0; - /* get_headers(s, asf_header); */ + num_stream_ids = 0; + /* get_headers(s, asf_header); */ - asf_header_len = get_header (tcp, asf_header, networking); + asf_header_len = get_header (tcp, asf_header, networking); // printf("---------------------------------- asf_header %d\n",asf_header); - if (asf_header_len==0) { //error reading header - tcp.close(); - return -1; - } - packet_length = interp_header (asf_header, asf_header_len); + if (asf_header_len==0) { //error reading header + tcp.close(); + return MPXP_False; + } + packet_length = interp_header (asf_header, asf_header_len); + /* + * This command is the media stream MBR selector. Switches are always 6 bytes in length. + * After all switch elements, data ends with bytes [00 00] 00 20 ac 40 [02]. + * Where: + * [00 00] shows 0x61 0x00 (on the first 33 sent) or 0xff 0xff for ASF files, and with no ending data for WMV files. + * It is not yet understood what all this means. + * And the last [02] byte is probably the header ?session' value. + * + * 0x33 */ - /* - * This command is the media stream MBR selector. Switches are always 6 bytes in length. - * After all switch elements, data ends with bytes [00 00] 00 20 ac 40 [02]. - * Where: - * [00 00] shows 0x61 0x00 (on the first 33 sent) or 0xff 0xff for ASF files, and with no ending data for WMV files. - * It is not yet understood what all this means. - * And the last [02] byte is probably the header ?session' value. - * - * 0x33 */ + memset (data, 0, 40); - memset (data, 0, 40); + if (mp_conf.audio_id > 0) { + data[2] = 0xFF; + data[3] = 0xFF; + data[4] = mp_conf.audio_id; + send_command(tcp, 0x33, num_stream_ids, 0xFFFF | mp_conf.audio_id << 16, 8, data); + } else { + for (i=1; i<num_stream_ids; i++) { + data [ (i-1) * 6 + 2 ] = 0xFF; + data [ (i-1) * 6 + 3 ] = 0xFF; + data [ (i-1) * 6 + 4 ] = stream_ids[i]; + data [ (i-1) * 6 + 5 ] = 0x00; + } + send_command (tcp, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data); + } - if (mp_conf.audio_id > 0) { - data[2] = 0xFF; - data[3] = 0xFF; - data[4] = mp_conf.audio_id; - send_command(tcp, 0x33, num_stream_ids, 0xFFFF | mp_conf.audio_id << 16, 8, data); - } else { - for (i=1; i<num_stream_ids; i++) { - data [ (i-1) * 6 + 2 ] = 0xFF; - data [ (i-1) * 6 + 3 ] = 0xFF; - data [ (i-1) * 6 + 4 ] = stream_ids[i]; - data [ (i-1) * 6 + 5 ] = 0x00; - } + get_answer (tcp); - send_command (tcp, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data); - } + /* Start sending file from packet xx. + * This command is also used for resume downloads or requesting a lost packet. + * Also used for seeking by sending a play point value which seeks to the media time point. + * Includes ?session' value in pre header and the maximum media stream time. + * 0x07 */ - get_answer (tcp); + memset (data, 0, 40); - /* Start sending file from packet xx. - * This command is also used for resume downloads or requesting a lost packet. - * Also used for seeking by sending a play point value which seeks to the media time point. - * Includes ?session' value in pre header and the maximum media stream time. - * 0x07 */ + for (i=8; i<16; i++) data[i] = 0xFF; + data[20] = 0x04; - memset (data, 0, 40); + send_command (tcp, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data); - for (i=8; i<16; i++) - data[i] = 0xFF; + networking->networking_read = asf_mmst_networking_read; + networking->networking_seek = asf_mmst_networking_seek; + networking->buffering = 1; + networking->status = networking_playing_e; - data[20] = 0x04; + packet_length1 = packet_length; + MSG_V("mmst packet_length = %d\n",packet_length); - send_command (tcp, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data); - - networking->networking_read = asf_mmst_networking_read; - networking->networking_seek = asf_mmst_networking_seek; - networking->buffering = 1; - networking->status = networking_playing_e; - - packet_length1 = packet_length; - MSG_V("mmst packet_length = %d\n",packet_length); - #ifdef USE_ICONV - if (url_conv != (iconv_t)(-1)) - iconv_close(url_conv); + if (url_conv != (iconv_t)(-1)) iconv_close(url_conv); #endif - - return 0; + return MPXP_Ok; } Modified: mplayerxp/libmpstream/asf_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_streaming.cpp 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/asf_streaming.cpp 2012-12-07 16:03:55 UTC (rev 517) @@ -51,7 +51,7 @@ // WMP sequence is MMSU then MMST and then HTTP. // In MPlayer case since HTTP support is more reliable, // we are doing HTTP first then we try MMST if HTTP fail. -static int asf_http_networking_start(Tcp& fd, networking_t *networking ); +static MPXP_Rc asf_http_networking_start(Tcp& fd, networking_t *networking ); /* ASF networking support several network protocol. @@ -73,17 +73,17 @@ In MPlayer case since HTTP support is more reliable, we are doing HTTP first then we try MMST if HTTP fail. */ -int asf_networking_start(Tcp& tcp, networking_t *networking) { +MPXP_Rc asf_networking_start(Tcp& tcp, networking_t *networking) { char *proto = networking->url->protocol; int port = networking->url->port; - int rc; + MPXP_Rc rc; // Is protocol even valid mms,mmsu,mmst,http,http_proxy? if (!(!strncasecmp(proto, "mmst", 4) || !strncasecmp(proto, "mmsu", 4) || !strncasecmp(proto, "http_proxy", 10) || !strncasecmp(proto, "mms", 3) || !strncasecmp(proto, "http", 4))) { MSG_ERR("Unknown protocol: %s\n", proto ); - return -1; + return MPXP_False; } // Is protocol mms or mmsu? @@ -92,7 +92,7 @@ //fd = asf_mmsu_networking_start( stream ); //mmsu support is not implemented yet - using this code MSG_V(" ===> ASF/UDP failed\n"); - return -1; + return MPXP_False; } //Is protocol mms or mmst? @@ -100,9 +100,9 @@ MSG_V("Trying ASF/TCP...\n"); rc = asf_mmst_networking_start(tcp,networking); networking->url->port = port; - if( rc>-1 ) return 0; + if( rc==MPXP_Ok ) return MPXP_Ok; MSG_V(" ===> ASF/TCP failed\n"); - if( rc==-2 ) return -1; + return MPXP_False; } //Is protocol http, http_proxy, or mms? @@ -111,12 +111,12 @@ MSG_V("Trying ASF/HTTP...\n"); rc = asf_http_networking_start(tcp,networking); networking->url->port = port; - if( rc>-1 ) return 0; + if( rc==MPXP_Ok ) return MPXP_Ok; MSG_V(" ===> ASF/HTTP failed\n"); - if( rc==-2 ) return -1; + return MPXP_False; } //everything failed - return -1; + return MPXP_False; } static int @@ -184,256 +184,235 @@ return best; } -static int +static MPXP_Rc asf_networking_parse_header(Tcp& tcp, networking_t* networking) { - ASF_header_t asfh; - ASF_stream_chunck_t chunk; - asf_http_networking_t* asf_ctrl = (asf_http_networking_t*) networking->data; - char* buffer=NULL, *chunk_buffer=NULL; - int i,r,size,pos = 0; - int start; - int buffer_size = 0; - int chunk_size2read = 0; - int bw = networking->bandwidth; - int *v_rates = NULL, *a_rates = NULL; - int v_rate = 0, a_rate = 0, a_idx = -1, v_idx = -1; + ASF_header_t asfh; + ASF_stream_chunck_t chunk; + asf_http_networking_t* asf_ctrl = (asf_http_networking_t*) networking->data; + char* buffer=NULL, *chunk_buffer=NULL; + int i,r,size,pos = 0; + int start; + int buffer_size = 0; + int chunk_size2read = 0; + int bw = networking->bandwidth; + int *v_rates = NULL, *a_rates = NULL; + int v_rate = 0, a_rate = 0, a_idx = -1, v_idx = -1; - if(asf_ctrl == NULL) return -1; + if(asf_ctrl == NULL) return MPXP_False; - // The ASF header can be in several network chunks. For example if the content description - // is big, the ASF header will be split in 2 network chunk. - // So we need to retrieve all the chunk before starting to parse the header. - do { - for( r=0; r < (int)sizeof(ASF_stream_chunck_t) ; ) { - i = nop_networking_read(tcp,((char*)&chunk)+r,sizeof(ASF_stream_chunck_t) - r,networking); - if(i <= 0) return -1; - r += i; - } - // Endian handling of the stream chunk - le2me_ASF_stream_chunck_t(&chunk); - size = asf_networking( &chunk, &r) - sizeof(ASF_stream_chunck_t); - if(r) MSG_WARN("Warning : drop header ????\n"); - if(size < 0){ - MSG_ERR("Error while parsing chunk header\n"); - return -1; - } - if (chunk.type != ASF_STREAMING_HEADER) { + // The ASF header can be in several network chunks. For example if the content description + // is big, the ASF header will be split in 2 network chunk. + // So we need to retrieve all the chunk before starting to parse the header. + do { + for( r=0; r < (int)sizeof(ASF_stream_chunck_t) ; ) { + i = nop_networking_read(tcp,((char*)&chunk)+r,sizeof(ASF_stream_chunck_t) - r,networking); + if(i <= 0) return MPXP_False; + r += i; + } + // Endian handling of the stream chunk + le2me_ASF_stream_chunck_t(&chunk); + size = asf_networking( &chunk, &r) - sizeof(ASF_stream_chunck_t); + if(r) MSG_WARN("Warning : drop header ????\n"); + if(size < 0){ + MSG_ERR("Error while parsing chunk header\n"); + return MPXP_False; + } + if (chunk.type != ASF_STREAMING_HEADER) { MSG_ERR("Don't got a header as first chunk !!!!\n"); - return -1; - } - - // audit: do not overflow buffer_size - if (size > std::numeric_limits<size_t>::max() - buffer_size) return -1; - buffer = (char*) mp_malloc(size+buffer_size); - if(buffer == NULL) { + return MPXP_False; + } + // audit: do not overflow buffer_size + if (size > std::numeric_limits<size_t>::max() - buffer_size) return MPXP_False; + buffer = (char*) mp_malloc(size+buffer_size); + if(buffer == NULL) { MSG_FATAL("Error can't allocate %d bytes buffer\n",size+buffer_size); - return -1; - } - if( chunk_buffer!=NULL ) { - memcpy( buffer, chunk_buffer, buffer_size ); - delete chunk_buffer ; - } - chunk_buffer = buffer; - buffer += buffer_size; - buffer_size += size; + return MPXP_False; + } + if( chunk_buffer!=NULL ) { + memcpy( buffer, chunk_buffer, buffer_size ); + delete chunk_buffer ; + } + chunk_buffer = buffer; + buffer += buffer_size; + buffer_size += size; - for(r = 0; r < size;) { + for(r = 0; r < size;) { i = nop_networking_read(tcp,buffer+r,size-r,networking); if(i < 0) { - MSG_ERR("Error while reading network stream\n"); - return -1; + MSG_ERR("Error while reading network stream\n"); + return MPXP_False; } r += i; - } + } - if( chunk_size2read==0 ) { - if(size < (int)sizeof(asfh)) { - MSG_ERR("Error chunk is too small\n"); - return -1; - } else MSG_DBG2("Got chunk\n"); - memcpy(&asfh,buffer,sizeof(asfh)); - le2me_ASF_header_t(&asfh); - chunk_size2read = asfh.objh.size; - MSG_DBG2("Size 2 read=%d\n", chunk_size2read); - } - } while( buffer_size<chunk_size2read); - buffer = chunk_buffer; - size = buffer_size; + if( chunk_size2read==0 ) { + if(size < (int)sizeof(asfh)) { + MSG_ERR("Error chunk is too small\n"); + return MPXP_False; + } else MSG_DBG2("Got chunk\n"); + memcpy(&asfh,buffer,sizeof(asfh)); + le2me_ASF_header_t(&asfh); + chunk_size2read = asfh.objh.size; + MSG_DBG2("Size 2 read=%d\n", chunk_size2read); + } + } while( buffer_size<chunk_size2read); + buffer = chunk_buffer; + size = buffer_size; - if(asfh.cno > 256) { - MSG_ERR("Error sub chunks number is invalid\n"); - return -1; - } + if(asfh.cno > 256) { + MSG_ERR("Error sub chunks number is invalid\n"); + return MPXP_False; + } - start = sizeof(asfh); + start = sizeof(asfh); - pos = find_asf_guid(buffer, asf_file_header_guid, start, size); - if (pos >= 0) { - ASF_file_header_t *fileh = (ASF_file_header_t *) &buffer[pos]; - pos += sizeof(ASF_file_header_t); - if (pos > size) goto len_err_out; - le2me_ASF_file_header_t(fileh); -/* - if(fileh.packetsize != fileh.packetsize2) { - printf("Error packetsize check don't match\n"); - return -1; - } -*/ - asf_ctrl->packet_size = fileh->max_packet_size; - // before playing. - // preroll: time in ms to bufferize before playing - networking->prebuffer_size = (unsigned int)(((double)fileh->preroll/1000.0)*((double)fileh->max_bitrate/8.0)); - } + pos = find_asf_guid(buffer, asf_file_header_guid, start, size); + if (pos >= 0) { + ASF_file_header_t *fileh = (ASF_file_header_t *) &buffer[pos]; + pos += sizeof(ASF_file_header_t); + if (pos > size) goto len_err_out; + le2me_ASF_file_header_t(fileh); + asf_ctrl->packet_size = fileh->max_packet_size; + // before playing. + // preroll: time in ms to bufferize before playing + networking->prebuffer_size = (unsigned int)(((double)fileh->preroll/1000.0)*((double)fileh->max_bitrate/8.0)); + } - pos = start; - while ((pos = find_asf_guid(buffer, asf_stream_header_guid, pos, size)) >= 0) - { - ASF_stream_header_t *streamh = (ASF_stream_header_t *)&buffer[pos]; - pos += sizeof(ASF_stream_header_t); - if (pos > size) goto len_err_out; - le2me_ASF_stream_header_t(streamh); - switch(ASF_LOAD_GUID_PREFIX(streamh->type)) { - case 0xF8699E40 : // audio stream - if(asf_ctrl->audio_streams == NULL){ - asf_ctrl->audio_streams = (int*)mp_malloc(sizeof(int)); - asf_ctrl->n_audio = 1; - } else { - asf_ctrl->n_audio++; - asf_ctrl->audio_streams = (int*)mp_realloc(asf_ctrl->audio_streams, - asf_ctrl->n_audio*sizeof(int)); - } - asf_ctrl->audio_streams[asf_ctrl->n_audio-1] = streamh->stream_no; - break; - case 0xBC19EFC0 : // video stream - if(asf_ctrl->video_streams == NULL){ - asf_ctrl->video_streams = (int*)mp_malloc(sizeof(int)); - asf_ctrl->n_video = 1; - } else { - asf_ctrl->n_video++; - asf_ctrl->video_streams = (int*)mp_realloc(asf_ctrl->video_streams, + pos = start; + while ((pos = find_asf_guid(buffer, asf_stream_header_guid, pos, size)) >= 0) { + ASF_stream_header_t *streamh = (ASF_stream_header_t *)&buffer[pos]; + pos += sizeof(ASF_stream_header_t); + if (pos > size) goto len_err_out; + le2me_ASF_stream_header_t(streamh); + switch(ASF_LOAD_GUID_PREFIX(streamh->type)) { + case 0xF8699E40 : // audio stream + if(asf_ctrl->audio_streams == NULL){ + asf_ctrl->audio_streams = (int*)mp_malloc(sizeof(int)); + asf_ctrl->n_audio = 1; + } else { + asf_ctrl->n_audio++; + asf_ctrl->audio_streams = (int*)mp_realloc(asf_ctrl->audio_streams, + asf_ctrl->n_audio*sizeof(int)); + } + asf_ctrl->audio_streams[asf_ctrl->n_audio-1] = streamh->stream_no; + break; + case 0xBC19EFC0 : // video stream + if(asf_ctrl->video_streams == NULL){ + asf_ctrl->video_streams = (int*)mp_malloc(sizeof(int)); + asf_ctrl->n_video = 1; + } else { + asf_ctrl->n_video++; + asf_ctrl->video_streams = (int*)mp_realloc(asf_ctrl->video_streams, asf_ctrl->n_video*sizeof(int)); + } + asf_ctrl->video_streams[asf_ctrl->n_video-1] = streamh->stream_no; + break; } - asf_ctrl->video_streams[asf_ctrl->n_video-1] = streamh->stream_no; - break; - } - } + } - // always allocate to avoid lots of ifs later - v_rates =new(zeromem) int [asf_ctrl->n_video]; - a_rates =new(zeromem) int [asf_ctrl->n_audio]; + // always allocate to avoid lots of ifs later + v_rates =new(zeromem) int [asf_ctrl->n_video]; + a_rates =new(zeromem) int [asf_ctrl->n_audio]; - pos = find_asf_guid(buffer, asf_stream_group_guid, start, size); - if (pos >= 0) { - // stream bitrate properties object + pos = find_asf_guid(buffer, asf_stream_group_guid, start, size); + if (pos >= 0) { + // stream bitrate properties object int stream_count; char *ptr = &buffer[pos]; MSG_V("Stream bitrate properties object\n"); - stream_count = le2me_16(*(uint16_t*)ptr); - ptr += sizeof(uint16_t); - if (ptr > &buffer[size]) goto len_err_out; - MSG_V(" stream count=[0x%x][%u]\n", - stream_count, stream_count ); - for( i=0 ; i<stream_count ; i++ ) { - uint32_t rate; - int id; - int j; - id = le2me_16(*(uint16_t*)ptr); - ptr += sizeof(uint16_t); - if (ptr > &buffer[size]) goto len_err_out; - memcpy(&rate, ptr, sizeof(uint32_t));// workaround unaligment bug on sparc - ptr += sizeof(uint32_t); - if (ptr > &buffer[size]) goto len_err_out; - rate = le2me_32(rate); - MSG_V( - " stream id=[0x%x][%u]\n", id, id); - MSG_V( - " max bitrate=[0x%x][%u]\n", rate, rate); - for (j = 0; j < asf_ctrl->n_video; j++) { - if (id == asf_ctrl->video_streams[j]) { - MSG_V(" is video stream\n"); - v_rates[j] = rate; - break; - } - } - for (j = 0; j < asf_ctrl->n_audio; j++) { - if (id == asf_ctrl->audio_streams[j]) { - MSG_V( " is audio stream\n"); - a_rates[j] = rate; - break; - } - } + stream_count = le2me_16(*(uint16_t*)ptr); + ptr += sizeof(uint16_t); + if (ptr > &buffer[size]) goto len_err_out; + MSG_V(" stream count=[0x%x][%u]\n",stream_count, stream_count ); + for( i=0 ; i<stream_count ; i++ ) { + uint32_t rate; + int id; + int j; + id = le2me_16(*(uint16_t*)ptr); + ptr += sizeof(uint16_t); + if (ptr > &buffer[size]) goto len_err_out; + memcpy(&rate, ptr, sizeof(uint32_t));// workaround unaligment bug on sparc + ptr += sizeof(uint32_t); + if (ptr > &buffer[size]) goto len_err_out; + rate = le2me_32(rate); + MSG_V(" stream id=[0x%x][%u]\n", id, id); + MSG_V(" max bitrate=[0x%x][%u]\n", rate, rate); + for (j = 0; j < asf_ctrl->n_video; j++) { + if (id == asf_ctrl->video_streams[j]) { + MSG_V(" is video stream\n"); + v_rates[j] = rate; + break; } - } - delete buffer; + } + for (j = 0; j < asf_ctrl->n_audio; j++) { + if (id == asf_ctrl->audio_streams[j]) { + MSG_V( " is audio stream\n"); + a_rates[j] = rate; + break; + } + } + } + } + delete buffer; - // automatic stream selection based on bandwidth - if (bw == 0) bw = INT_MAX; - MSG_V( "Max bandwidth set to %d\n", bw); + // automatic stream selection based on bandwidth + if (bw == 0) bw = INT_MAX; + MSG_V( "Max bandwidth set to %d\n", bw); - if (asf_ctrl->n_audio) { - // find lowest-bitrate audio stream - a_rate = a_rates[0]; - a_idx = 0; - for (i = 0; i < asf_ctrl->n_audio; i++) { - if (a_rates[i] < a_rate) { - a_rate = a_rates[i]; - a_idx = i; - } + if (asf_ctrl->n_audio) { + // find lowest-bitrate audio stream + a_rate = a_rates[0]; + a_idx = 0; + for (i = 0; i < asf_ctrl->n_audio; i++) { + if (a_rates[i] < a_rate) { + a_rate = a_rates[i]; + a_idx = i; + } + } + if (max_idx(asf_ctrl->n_video, v_rates, bw - a_rate) < 0) { + // both audio and video are not possible, try video only next + a_idx = -1; + a_rate = 0; + } } - if (max_idx(asf_ctrl->n_video, v_rates, bw - a_rate) < 0) { - // both audio and video are not possible, try video only next - a_idx = -1; - a_rate = 0; - } - } - // find best video stream - v_idx = max_idx(asf_ctrl->n_video, v_rates, bw - a_rate); - if (v_idx >= 0) - v_rate = v_rates[v_idx]; + // find best video stream + v_idx = max_idx(asf_ctrl->n_video, v_rates, bw - a_rate); + if (v_idx >= 0) v_rate = v_rates[v_idx]; + // find best audio stream + a_idx = max_idx(asf_ctrl->n_audio, a_rates, bw - v_rate); - // find best audio stream - a_idx = max_idx(asf_ctrl->n_audio, a_rates, bw - v_rate); + delete v_rates; + delete a_rates; - delete v_rates; - delete a_rates; + if (a_idx < 0 && v_idx < 0) { + MSG_FATAL( "bandwidth too small, file cannot be played!\n"); + return MPXP_False; + } - if (a_idx < 0 && v_idx < 0) { - MSG_FATAL( "bandwidth too small, " - "file cannot be played!\n"); - return -1; - } - - if (mp_conf.audio_id > 0) // a audio stream was forced - asf_ctrl->audio_id = mp_conf.audio_id; - else if (a_idx >= 0) - asf_ctrl->audio_id = asf_ctrl->audio_streams[a_idx]; - else if (asf_ctrl->n_audio) { - MSG_WARN( "bandwidth too small, " - "deselected audio stream\n"); - mp_conf.audio_id = -2; - } + if (mp_conf.audio_id > 0) asf_ctrl->audio_id = mp_conf.audio_id; + else if (a_idx >= 0) asf_ctrl->audio_id = asf_ctrl->audio_streams[a_idx]; + else if (asf_ctrl->n_audio) { + MSG_WARN( "bandwidth too small, deselected audio stream\n"); + mp_conf.audio_id = -2; + } - if (mp_conf.video_id > 0) // a video stream was forced - asf_ctrl->video_id = mp_conf.video_id; - else if (v_idx >= 0) - asf_ctrl->video_id = asf_ctrl->video_streams[v_idx]; - else if (asf_ctrl->n_video) { - MSG_WARN( "bandwidth too small, " - "deselected video stream\n"); - mp_conf.video_id = -2; - } + if (mp_conf.video_id > 0) asf_ctrl->video_id = mp_conf.video_id; + else if (v_idx >= 0) asf_ctrl->video_id = asf_ctrl->video_streams[v_idx]; + else if (asf_ctrl->n_video) { + MSG_WARN( "bandwidth too small, deselected video stream\n"); + mp_conf.video_id = -2; + } + return MPXP_Ok; - return 1; - len_err_out: - MSG_FATAL( "Invalid length in ASF header!\n"); - if (buffer) delete buffer; - if (v_rates) delete v_rates; - if (a_rates) delete a_rates; - return -1; + MSG_FATAL( "Invalid length in ASF header!\n"); + if (buffer) delete buffer; + if (v_rates) delete v_rates; + if (a_rates) delete a_rates; + return MPXP_False; } static int @@ -741,131 +720,129 @@ return 0; } -static int asf_http_networking_start(Tcp& tcp, networking_t *networking) { - HTTP_header_t *http_hdr=NULL; - URL_t *url = networking->url; - asf_http_networking_t *asf_http_ctrl; - char buffer[BUFFER_SIZE]; - int i, ret; - int done; - int auth_retry = 0; +static MPXP_Rc asf_http_networking_start(Tcp& tcp, networking_t *networking) { + HTTP_header_t *http_hdr=NULL; + URL_t *url = networking->url; + asf_http_networking_t *asf_http_ctrl; + char buffer[BUFFER_SIZE]; + int i, ret; + int done; + int auth_retry = 0; - asf_http_ctrl = new(zeromem) asf_http_networking_t; - if( asf_http_ctrl==NULL ) { - MSG_FATAL("Memory allocation failed\n"); - return -1; + asf_http_ctrl = new(zeromem) asf_http_networking_t; + if( asf_http_ctrl==NULL ) { + MSG_FATAL("Memory allocation failed\n"); + return MPXP_False; + } + asf_http_ctrl->networking_type = ASF_Unknown_e; + asf_http_ctrl->request = 1; + asf_http_ctrl->audio_streams = asf_http_ctrl->video_streams = NULL; + asf_http_ctrl->n_audio = asf_http_ctrl->n_video = 0; + networking->data = (any_t*)asf_http_ctrl; + + do { + done = 1; + tcp.close(); + + if( !strcasecmp( url->protocol, "http_proxy" ) ) { + if( url->port==0 ) url->port = 8080; + } else { + if( url->port==0 ) url->port = 80; } - asf_http_ctrl->networking_type = ASF_Unknown_e; - asf_http_ctrl->request = 1; - asf_http_ctrl->audio_streams = asf_http_ctrl->video_streams = NULL; - asf_http_ctrl->n_audio = asf_http_ctrl->n_video = 0; - networking->data = (any_t*)asf_http_ctrl; + tcp.open(networking->libinput, url->hostname, url->port, Tcp::IP4); + if( !tcp.established()) return MPXP_False; + http_hdr = asf_http_request( networking ); + MSG_DBG2("Request [%s]\n", http_hdr->buffer ); + for(i=0; i < (int)http_hdr->buffer_size ; ) { + int r = tcp.write((uint8_t*)(http_hdr->buffer+i), http_hdr->buffer_size-i); + if(r<0) { + MSG_ERR("Socket write error : %s\n",strerror(errno)); + return MPXP_False; + } + i += r; + } + http_free( http_hdr ); + http_hdr = http_new_header(); do { - done = 1; - tcp.close(); - - if( !strcasecmp( url->protocol, "http_proxy" ) ) { - if( url->port==0 ) url->port = 8080; - } else { - if( url->port==0 ) url->port = 80; + i = tcp.read((uint8_t*)buffer, BUFFER_SIZE); + if( i<=0 ) { + perror("read"); + http_free( http_hdr ); + return MPXP_False; + } + http_response_append( http_hdr, buffer, i ); + } while( !http_is_header_entire( http_hdr ) ); + if( mp_conf.verbose>0 ) { + http_hdr->buffer[http_hdr->buffer_size]='\0'; + MSG_DBG2("Response [%s]\n", http_hdr->buffer ); + } + ret = asf_http_parse_response(asf_http_ctrl, http_hdr); + if( ret<0 ) { + MSG_ERR("Failed to parse header\n"); + http_free( http_hdr ); + return MPXP_False; + } + switch( asf_http_ctrl->networking_type ) { + case ASF_Live_e: + case ASF_Prerecorded_e: + case ASF_PlainText_e: + if( http_hdr->body_size>0 ) { + if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { + http_free( http_hdr ); + return MPXP_False; + } } - tcp.open(networking->libinput, url->hostname, url->port, Tcp::IP4); - if( !tcp.established()) return 0; - - http_hdr = asf_http_request( networking ); - MSG_DBG2("Request [%s]\n", http_hdr->buffer ); - for(i=0; i < (int)http_hdr->buffer_size ; ) { - int r = tcp.write((uint8_t*)(http_hdr->buffer+i), http_hdr->buffer_size-i); - if(r <0) { - MSG_ERR("Socket write error : %s\n",strerror(errno)); - return -1; + if( asf_http_ctrl->request==1 ) { + if( asf_http_ctrl->networking_type!=ASF_PlainText_e ) { + // First request, we only got the ASF header. + ret = asf_networking_parse_header(tcp,networking); + if(ret < 0) return MPXP_False; + if(asf_http_ctrl->n_audio == 0 && asf_http_ctrl->n_video == 0) { + MSG_ERR("No stream found\n"); + return MPXP_False; } - i += r; + asf_http_ctrl->request++; + done = 0; + } else done = 1; } - http_free( http_hdr ); - http_hdr = http_new_header(); - do { - i = tcp.read((uint8_t*)buffer, BUFFER_SIZE); - if( i<=0 ) { - perror("read"); - http_free( http_hdr ); - return -1; - } - http_response_append( http_hdr, buffer, i ); - } while( !http_is_header_entire( http_hdr ) ); - if( mp_conf.verbose>0 ) { - http_hdr->buffer[http_hdr->buffer_size]='\0'; - MSG_DBG2("Response [%s]\n", http_hdr->buffer ); - } - ret = asf_http_parse_response(asf_http_ctrl, http_hdr); - if( ret<0 ) { - MSG_ERR("Failed to parse header\n"); + break; + case ASF_Redirector_e: + if( http_hdr->body_size>0 ) { + if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { http_free( http_hdr ); - return -1; + return MPXP_False; + } } - switch( asf_http_ctrl->networking_type ) { - case ASF_Live_e: - case ASF_Prerecorded_e: - case ASF_PlainText_e: - if( http_hdr->body_size>0 ) { - if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { - http_free( http_hdr ); - return -1; - } - } - if( asf_http_ctrl->request==1 ) { - if( asf_http_ctrl->networking_type!=ASF_PlainText_e ) { - // First request, we only got the ASF header. - ret = asf_networking_parse_header(tcp,networking); - if(ret < 0) return -1; - if(asf_http_ctrl->n_audio == 0 && asf_http_ctrl->n_video == 0) { - MSG_ERR("No stream found\n"); - return -1; - } - asf_http_ctrl->request++; - done = 0; - } else { - done = 1; - } - } - break; - case ASF_Redirector_e: - if( http_hdr->body_size>0 ) { - if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { - http_free( http_hdr ); - return -1; - } - } -// type |= STREAMTYPE_TEXT; - done = 1; - break; - case ASF_Authenticate_e: - if( http_authenticate( http_hdr, url, &auth_retry)<0 ) return -1; - asf_http_ctrl->networking_type = ASF_Unknown_e; - done = 0; - break; - case ASF_Unknown_e: - default: - MSG_ERR("Unknown ASF networking type\n"); - tcp.close(); - http_free( http_hdr ); - return -1; - } - // Check if we got a redirect. - } while(!done); - - if( asf_http_ctrl->networking_type==ASF_PlainText_e || asf_http_ctrl->networking_type==ASF_Redirector_e ) { - networking->networking_read = nop_networking_read; - networking->networking_seek = nop_networking_seek; - } else { - networking->networking_read = asf_http_networking_read; - networking->networking_seek = asf_http_networking_seek; - networking->buffering = 1; +// type |= STREAMTYPE_TEXT; + done = 1; + break; + case ASF_Authenticate_e: + if( http_authenticate( http_hdr, url, &auth_retry)<0 ) return MPXP_False; + asf_http_ctrl->networking_type = ASF_Unknown_e; + done = 0; + break; + case ASF_Unknown_e: + default: + MSG_ERR("Unknown ASF networking type\n"); + tcp.close(); + http_free( http_hdr ); + return MPXP_False; } - networking->status = networking_playing_e; + // Check if we got a redirect. + } while(!done); - http_free( http_hdr ); - return 0; + if( asf_http_ctrl->networking_type==ASF_PlainText_e || asf_http_ctrl->networking_type==ASF_Redirector_e ) { + networking->networking_read = nop_networking_read; + networking->networking_seek = nop_networking_seek; + } else { + networking->networking_read = asf_http_networking_read; + networking->networking_seek = asf_http_networking_seek; + networking->buffering = 1; + } + networking->status = networking_playing_e; + + http_free( http_hdr ); + return MPXP_Ok; } Modified: mplayerxp/libmpstream/asf_streaming.h =================================================================== --- mplayerxp/libmpstream/asf_streaming.h 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/asf_streaming.h 2012-12-07 16:03:55 UTC (rev 517) @@ -5,7 +5,7 @@ namespace mpxp { class Tcp; } -extern int asf_networking_start(Tcp& fd, networking_t *networking); -extern int asf_mmst_networking_start(Tcp& fd, networking_t *networking); +extern MPXP_Rc asf_networking_start(Tcp& fd, networking_t *networking); +extern MPXP_Rc asf_mmst_networking_start(Tcp& fd, networking_t *networking); #endif Modified: mplayerxp/libmpstream/network.cpp =================================================================== --- mplayerxp/libmpstream/network.cpp 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/network.cpp 2012-12-07 16:03:55 UTC (rev 517) @@ -362,13 +362,12 @@ // By using the protocol, the extension of the file or the content-type // we might be able to guess the networking type. -int autodetectProtocol(networking_t *networking, Tcp& tcp) { +static MPXP_Rc autodetectProtocol(networking_t *networking, Tcp& tcp) { HTTP_header_t *http_hdr=NULL; unsigned int i; - int fd=-1; int redirect; int auth_retry=0; - int seekable=0; + MPXP_Rc seekable=MPXP_False; char *extension; char *content_type; char *next_url; @@ -394,7 +393,7 @@ MSG_ERR("You must enter a port number for RTP streams!\n"); goto err_out; } - return 0; + return MPXP_Ok; } #endif // HTTP based protocol @@ -411,7 +410,7 @@ if( http_hdr!=NULL && http_hdr->status_code==200 ) { char *accept_ranges; if( (accept_ranges = http_get_field(http_hdr,"Accept-Ranges")) != NULL ) - seekable = strncmp(accept_ranges,"bytes",5)==0; + seekable = strncmp(accept_ranges,"bytes",5)==0?MPXP_Ok:MPXP_False; } // Check if the response is an ICY status_code reason_phrase if( !strcasecmp(http_hdr->protocol, "ICY") ) { @@ -431,7 +430,7 @@ MSG_INFO("Public : %s\n", atoi(field_data)?"yes":"no"); field_data = NULL; if( (field_data = http_get_field(http_hdr, "icy-br")) != NULL ) MSG_INFO("Bitrate: %skbit/s\n", field_data); field_data = NULL; - return 0; + return MPXP_Ok; } case 400: // Server Full MSG_ERR("Error: ICY-Server is full, skipping!\n"); @@ -457,7 +456,7 @@ // Look if we can use the Content-Type content_type = http_get_field( http_hdr, "Content-Type" ); if( content_type!=NULL ) { - char *content_length = NULL; + const char *content_length = NULL; MSG_V("Content-Type: [%s]\n", content_type ); if( (content_length = http_get_field(http_hdr, "Content-Length")) != NULL) MSG_V("Content-Length: [%s]\n", http_get_field(http_hdr, "Content-Length")); @@ -470,7 +469,7 @@ } // Not found in the mime type table, don't fail, // we should try raw HTTP - return 0; + return MPXP_Ok; // Redirect case 301: // Permanently case 302: // Temporarily @@ -500,18 +499,16 @@ } } while( redirect ); err_out: - if (fd > 0) closesocket( fd ); - fd = -1; http_free( http_hdr ); http_hdr = NULL; - return -1; + return MPXP_False; } int networking_bufferize( networking_t *networking,unsigned char *buffer, int size) { //printf("networking_bufferize\n"); - networking->buffer = (char*)mp_malloc(size); + networking->buffer = new char [size]; if( networking->buffer==NULL ) { MSG_FATAL(MSGTR_OutOfMemory); return -1; @@ -561,18 +558,17 @@ return -1; } -int -nop_networking_start(Tcp& tcp,networking_t* networking ) { +MPXP_Rc nop_networking_start(Tcp& tcp,networking_t* networking ) { HTTP_header_t *http_hdr = NULL; char *next_url=NULL; URL_t *rd_url=NULL; - int ret; + MPXP_Rc ret; if( !tcp.established() ) { tcp = *http_send_request(networking->libinput, networking->url,0); - if( !tcp.established() ) return -1; + if( !tcp.established() ) return MPXP_False; http_hdr = http_read_response(tcp); - if( http_hdr==NULL ) return -1; + if( http_hdr==NULL ) return MPXP_False; switch( http_hdr->status_code ) { case 200: // OK @@ -581,14 +577,14 @@ if( http_hdr->body_size>0 ) { if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { http_free( http_hdr ); - return -1; + return MPXP_False; } } break; // Redirect case 301: // Permanently case 302: // Temporarily - ret=-1; + ret=MPXP_False; next_url = http_get_field( http_hdr, "Location" ); if (next_url != NULL) @@ -611,7 +607,7 @@ default: MSG_ERR("Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase ); tcp.close(); - return -1; + return MPXP_False; break; } } else { @@ -620,7 +616,7 @@ if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { http_free( http_hdr ); networking->data = NULL; - return -1; + return MPXP_False; } } } @@ -635,7 +631,7 @@ networking->prebuffer_size = 64*1024; // KBytes networking->buffering = 1; networking->status = networking_playing_e; - return 0; + return MPXP_Ok; } void fixup_network_stream_cache(networking_t *networking) { @@ -656,16 +652,15 @@ return pnm_read(reinterpret_cast<pnm_t*>(stream_ctrl->data), buffer, size); } - -int pnm_networking_start(Tcp& tcp,networking_t *networking ) { +MPXP_Rc pnm_networking_start(Tcp& tcp,networking_t *networking ) { pnm_t *pnm; tcp.open(networking->libinput, networking->url->hostname, networking->url->port ? networking->url->port : 7070); - if(!tcp.established()) return -1; + if(!tcp.established()) return MPXP_False; pnm = pnm_connect(tcp,networking->url->file); - if(!pnm) return -2; + if(!pnm) return MPXP_NA; networking->data=pnm; @@ -673,7 +668,7 @@ networking->prebuffer_size = 8*1024; // 8 KBytes networking->buffering = 1; networking->status = networking_playing_e; - return 0; + return MPXP_Ok; } #ifdef HAVE_RTSP_SESSION_H @@ -682,15 +677,13 @@ return rtsp_session_read(stream_ctrl->data, buffer, size); } - -int -realrtsp_networking_start( net_fd_t* fd, networking_t *stream ) { +MPXP_Rc realrtsp_networking_start( net_fd_t* fd, networking_t *stream ) { rtsp_session_t *rtsp; char *mrl; char *file; int port; int redirected, temp; - if( stream==NULL ) return -1; + if( stream==NULL ) return MPXP_False; temp = 5; // counter so we don't get caught in infinite redirections (you never know) @@ -700,7 +693,7 @@ *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 -1; + if(*fd<0) return MPXP_False; file = networking->url->file; if (file[0] == '/') file++; @@ -719,7 +712,7 @@ } while( (redirected != 0) && (temp > 0) ); - if(!rtsp) return -1; + if(!rtsp) return MPXP_False; networking->data=rtsp; @@ -727,7 +720,7 @@ networking->prebuffer_size = 128*1024; // 8 KBytes networking->buffering = 1; networking->status = networking_playing_e; - return 0; + return MPXP_Ok; } #endif // HAVE_RTSP_SESSION_H @@ -740,13 +733,12 @@ return read_rtp_from_server(tcp, buffer, size ); } -static int -rtp_networking_start(Tcp& tcp,networking_t* networking, int raw_udp ) { +static MPXP_Rc rtp_networking_start(Tcp& tcp,networking_t* networking, int raw_udp ) { if( !tcp.established() ) { Udp* udp(new(zeromem) Udp(networking->url)); tcp = udp->socket(); - if( !tcp.established()) return -1; + if( !tcp.established()) return MPXP_False; } if(raw_udp) @@ -758,19 +750,19 @@ networking->prebuffer_size = 64*1024; // KBytes networking->buffering = 0; networking->status = networking_playing_e; - return 0; + return MPXP_Ok; } #endif -int networking_start(Tcp& tcp,networking_t* networking, URL_t *url) { - int ret; +MPXP_Rc networking_start(Tcp& tcp,networking_t* networking, URL_t *url) { + MPXP_Rc rc; networking->url = check4proxies( url ); - ret = autodetectProtocol( networking, tcp); + rc = autodetectProtocol( networking, tcp); - if( ret<0 ) return -1; - ret = -1; + if( rc!=MPXP_Ok ) return MPXP_False; + rc = MPXP_False; // Get the bandwidth available networking->bandwidth = network_bandwidth; @@ -778,37 +770,36 @@ // For RTP streams, we usually don't know the stream type until we open it. if( !strcasecmp( networking->url->protocol, "rtp")) { if(tcp.established()) tcp.close(); - ret = rtp_networking_start(tcp, networking, 0); + rc = rtp_networking_start(tcp, networking, 0); } else if( !strcasecmp( networking->url->protocol, "pnm")) { tcp.close(); - ret = pnm_networking_start(tcp, networking); - if (ret == -1) { + rc = pnm_networking_start(tcp, networking); + if (rc == MPXP_False) { MSG_INFO("Can't connect with pnm, retrying with http.\n"); - return -1; + return MPXP_False; } } #ifdef HAVE_RTSP_SESSION_H else if( !strcasecmp( networking->url->protocol, "rtsp")) { - *fd = -1; - if ((ret = realrtsp_networking_start( tcp, networking )) < 0) { + if ((rc = realrtsp_networking_start( tcp, networking )) < 0) { MSG_INFO("Not a Realmedia rtsp url. Trying standard rtsp protocol.\n"); #ifdef STREAMING_LIVE_DOT_COM - ret = rtsp_networking_start( tcp, networking ); - if( ret<0 ) MSG_ERR("rtsp_networking_start failed\n"); - return ret; + rc = rtsp_networking_start( tcp, networking ); + if(rc==MPXP_FAlse ) MSG_ERR("rtsp_networking_start failed\n"); + return rc; #else MSG_ERR("RTSP support requires the \"LIVE.COM Streaming Media\" libraries!\n"); - return -1; + return MPXP_False; #endif } } #endif else if(!strcasecmp( networking->url->protocol, "udp")) { tcp.close(); - ret = rtp_networking_start(tcp, networking, 1); - if(ret<0) { + rc = rtp_networking_start(tcp, networking, 1); + if(rc==MPXP_False) { MSG_ERR("rtp_networking_start(udp) failed\n"); - return -1; + return MPXP_False; } } else { // Send the appropriate HTTP request @@ -816,25 +807,24 @@ // ASF raw stream is encapsulated. // It can also be a playlist (redirector) // so we need to pass demuxer_type too - ret = asf_networking_start(tcp,networking); - if( ret<0 ) { + rc = asf_networking_start(tcp,networking); + if( rc==MPXP_False ) { //sometimes a file is just on a webserver and it is not streamed. //try loading them default method as last resort for http protocol if ( !strcasecmp(networking->url->protocol, "http") ) { MSG_STATUS("Trying default networking for http protocol\n "); //reset stream tcp.close(); - ret=nop_networking_start(tcp,networking); + rc=nop_networking_start(tcp,networking); } - if (ret<0) { + if (rc==MPXP_False) { MSG_ERR("asf_networking_start failed\n"); MSG_STATUS("Check if this is a playlist which requires -playlist option\nExample: mplayer -playlist <url>\n"); } } } - if( ret<0 ) { - free_networking( networking ); - } else if( networking->buffering ) { + if( rc==MPXP_False ) ; + else if( networking->buffering ) { if(mp_conf.s_cache_size<0) { // cache option not set, will use our computed value. // buffer in KBytes, *5 because the prefill is 20% of the buffer. @@ -843,7 +833,7 @@ } MSG_INFO("Cache size set to %d KBytes\n", mp_conf.s_cache_size); } - return ret; + return rc; } int Modified: mplayerxp/libmpstream/network.h =================================================================== --- mplayerxp/libmpstream/network.h 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/network.h 2012-12-07 16:03:55 UTC (rev 517) @@ -51,7 +51,7 @@ }; extern void fixup_network_stream_cache(networking_t *s); -extern int networking_start(Tcp& fd,networking_t *n, URL_t *url); +extern MPXP_Rc networking_start(Tcp& fd,networking_t *n, URL_t *url); extern int networking_bufferize(networking_t *networking,unsigned char *buffer, int size); extern networking_t *new_networking(libinput_t* libinput); extern void free_networking( networking_t *networking ); Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-07 16:03:55 UTC (rev 517) @@ -56,7 +56,7 @@ url = url_new(filename); if(url) { networking=new_networking(libinput); - if(networking_start(tcp,networking,url)<0){ + if(networking_start(tcp,networking,url)!=MPXP_Ok){ MSG_ERR(MSGTR_UnableOpenURL, filename); url_free(url); url=NULL; Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-07 16:03:55 UTC (rev 517) @@ -42,7 +42,7 @@ virtual off_t size() const; virtual off_t sector_size() const; private: - int start (); + MPXP_Rc start (); networking_t* networking; Tcp tcp; @@ -77,9 +77,10 @@ rtsp_session_end (rtsp); url_free(networking->url); free_networking(networking); + networking=NULL; } -int Rtsp_Stream_Interface::start() +MPXP_Rc Rtsp_Stream_Interface::start() { rtsp_session_t *rtsp; char *mrl; @@ -100,7 +101,7 @@ if (!tcp.established() && !networking->url->port) tcp.open(networking->libinput,networking->url->hostname, port = 7070); - if (!tcp.established()) return -1; + if (!tcp.established()) return MPXP_False; file = networking->url->file; if (file[0] == '/') file++; @@ -123,7 +124,7 @@ temp--; } while ((redirected != 0) && (temp > 0)); - if (!rtsp) return -1; + if (!rtsp) return MPXP_False; networking->data = rtsp; @@ -131,7 +132,7 @@ networking->buffering = 1; networking->status = networking_playing_e; - return 0; + return MPXP_Ok; } extern int network_bandwidth; @@ -152,7 +153,7 @@ tcp.close(); index_mode = -1; /* prevent most RTSP streams from locking due to -idx */ - if (start() < 0) { + if (start() != MPXP_Ok) { free_networking(networking); networking = NULL; return MPXP_False; Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-07 14:29:41 UTC (rev 516) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-07 16:03:55 UTC (rev 517) @@ -41,7 +41,7 @@ virtual off_t size() const; virtual off_t sector_size() const; private: - int start (); + MPXP_Rc start (); networking_t* networking; Udp udp; @@ -70,13 +70,14 @@ { url_free(networking->url); free_networking(networking); + networking=NULL; } -int Udp_Stream_Interface::start () +MPXP_Rc Udp_Stream_Interface::start () { if (!udp.established()) { udp.open(networking->url); - if (!udp.established()) return -1; + if (!udp.established()) return MPXP_False; } tcp=udp.socket(); networking->networking_read = nop_networking_read; @@ -84,7 +85,7 @@ networking->prebuffer_size = 64 * 1024; /* 64 KBytes */ networking->buffering = 0; networking->status = networking_playing_e; - return 0; + return MPXP_Ok; } extern int network_bandwidth; @@ -105,7 +106,7 @@ networking = NULL; return MPXP_False; } - if (start () < 0) { + if (start () !=MPXP_Ok) { MSG_ERR("udp_networking_start failed\n"); free_networking (networking); networking = NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-07 14:29:51
|
Revision: 516 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=516&view=rev Author: nickols_k Date: 2012-12-07 14:29:41 +0000 (Fri, 07 Dec 2012) Log Message: ----------- use class Tcp and class Udp for networking instead of flat fd=open() access Modified Paths: -------------- mplayerxp/libmpstream/Makefile mplayerxp/libmpstream/asf_mmst_streaming.cpp mplayerxp/libmpstream/asf_streaming.cpp mplayerxp/libmpstream/asf_streaming.h mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/librtsp/rtsp.cpp mplayerxp/libmpstream/librtsp/rtsp.h mplayerxp/libmpstream/librtsp/rtsp_session.cpp mplayerxp/libmpstream/librtsp/rtsp_session.h mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/pnm.cpp mplayerxp/libmpstream/pnm.h mplayerxp/libmpstream/rtp.cpp mplayerxp/libmpstream/rtp.h mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/tcp.cpp mplayerxp/libmpstream/tcp.h mplayerxp/libmpstream/udp.cpp mplayerxp/libmpstream/udp.h mplayerxp/libmpsub/vobsub.cpp Modified: mplayerxp/libmpstream/Makefile =================================================================== --- mplayerxp/libmpstream/Makefile 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/Makefile 2012-12-07 14:29:41 UTC (rev 516) @@ -7,7 +7,7 @@ DO_ALL = @ for i in $(SUBDIRS); do $(MAKE) -C $$i all || exit; done CXXSRCS= s_file.cpp s_lavc.cpp s_null.cpp s_tv.cpp -CXXSRCS+= mrl.cpp stream.cpp url.cpp cache2.cpp +CXXSRCS+= mrl.cpp stream.cpp url.cpp cache2.cpp ifeq ($(HAVE_LIBCDIO_CDDA),yes) CXXSRCS += s_cdd.cpp CXXSRCS += cdda.cpp Modified: mplayerxp/libmpstream/asf_mmst_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -61,7 +61,7 @@ static int num_stream_ids; static int stream_ids[MAX_STREAMS]; -static int get_data (int s,unsigned char *buf, size_t count); +static int get_data (Tcp& s,unsigned char *buf, size_t count); static void put_32 (command_t *cmd, uint32_t value) { @@ -88,7 +88,7 @@ return ret; } -static void send_command (int s, int command, uint32_t switches, +static void send_command (Tcp& tcp, int command, uint32_t switches, uint32_t extra, int length, unsigned char *data) { @@ -117,7 +117,7 @@ if (length & 7) memset(&cmd.buf[48 + length], 0, 8 - (length & 7)); - if (send (s, cmd.buf, len8*8+48, 0) != (len8*8+48)) { + if (tcp.write (cmd.buf, len8*8+48) != (len8*8+48)) { MSG_ERR ("write error\n"); } } @@ -157,7 +157,7 @@ #endif } -static void get_answer (int s) +static void get_answer (Tcp& tcp) { unsigned char data[BUF_SIZE]; int command = 0x1b; @@ -165,7 +165,7 @@ while (command == 0x1b) { int len; - len = recv (s, data, BUF_SIZE, 0) ; + len = tcp.read(data, BUF_SIZE); if (!len) { MSG_ERR ("\nalert! eof\n"); return; @@ -174,18 +174,18 @@ command = get_32 (data, 36) & 0xFFFF; if (command == 0x1b) - send_command (s, 0x1b, 0, 0, 0, data); + send_command (tcp, 0x1b, 0, 0, 0, data); } } -static int get_data (int s,unsigned char *buf, size_t count) +static int get_data (Tcp& tcp,unsigned char *buf, size_t count) { ssize_t len; size_t total = 0; while (total < count) { - len = recv (s, &buf[total], count-total, 0); + len = tcp.read(&buf[total], count-total); if (len<=0) { MSG_ERR ("read error:"); @@ -205,7 +205,7 @@ } -static int get_header (int s, uint8_t *header, networking_t *networking) +static int get_header (Tcp& tcp, uint8_t *header, networking_t *networking) { unsigned char pre_header[8]; int header_len; @@ -213,7 +213,7 @@ header_len = 0; while (1) { - if (!get_data (s, pre_header, 8)) { + if (!get_data (tcp, pre_header, 8)) { MSG_ERR ("pre-header read failed\n"); return 0; } @@ -230,7 +230,7 @@ return 0; } - if (!get_data (s, &header[header_len], packet_len)) { + if (!get_data (tcp, &header[header_len], packet_len)) { MSG_ERR("header data read failed\n"); return 0; } @@ -256,7 +256,7 @@ int command; unsigned char data[BUF_SIZE]; - if (!get_data (s, (unsigned char*)&packet_len, 4)) { + if (!get_data (tcp, (unsigned char*)&packet_len, 4)) { MSG_ERR ("packet_len read failed\n"); return 0; } @@ -270,7 +270,7 @@ return 0; } - if (!get_data (s, data, packet_len)) { + if (!get_data (tcp, data, packet_len)) { MSG_ERR ("command data read failed\n"); return 0; } @@ -280,7 +280,7 @@ // printf ("command: %02x\n", command); if (command == 0x1b) - send_command (s, 0x1b, 0, 0, 0, data); + send_command (tcp, 0x1b, 0, 0, 0, data); } @@ -363,11 +363,11 @@ } -static int get_media_packet (int s, int padding, networking_t *stream_ctrl) { +static int get_media_packet (Tcp& tcp, int padding, networking_t *stream_ctrl) { unsigned char pre_header[8]; unsigned char data[BUF_SIZE]; - if (!get_data (s, pre_header, 8)) { + if (!get_data (tcp, pre_header, 8)) { MSG_ERR ("pre-header read failed\n"); return 0; } @@ -389,7 +389,7 @@ return 0; } - if (!get_data (s, data, packet_len)) { + if (!get_data (tcp, data, packet_len)) { MSG_ERR ("media data read failed\n"); return 0; } @@ -401,7 +401,7 @@ int32_t packet_len; int command; - if (!get_data (s, (unsigned char*)&packet_len, 4)) { + if (!get_data (tcp, (unsigned char*)&packet_len, 4)) { MSG_ERR ("packet_len read failed\n"); return 0; } @@ -413,7 +413,7 @@ return 0; } - if (!get_data (s, data, packet_len)) { + if (!get_data (tcp, data, packet_len)) { MSG_ERR ("command data read failed\n"); return 0; } @@ -430,7 +430,7 @@ // printf ("\ncommand packet detected, len=%d cmd=0x%X\n", packet_len, command); if (command == 0x1b) - send_command (s, 0x1b, 0, 0, 0, data); + send_command (tcp, 0x1b, 0, 0, 0, data); else if (command == 0x1e) { MSG_OK ("everything done. Thank you for downloading a media file containing proprietary and patentend technology.\n"); return 0; @@ -454,13 +454,13 @@ static int packet_length1; -static int asf_mmst_networking_read( int fd, char *buffer, int size, networking_t *stream_ctrl ) +static int asf_mmst_networking_read(Tcp& tcp, char *buffer, int size, networking_t *stream_ctrl ) { int len; while( stream_ctrl->buffer_size==0 ) { // buffer is empty - fill it! - int ret = get_media_packet( fd, packet_length1, stream_ctrl); + int ret = get_media_packet(tcp, packet_length1, stream_ctrl); if( ret<0 ) { MSG_ERR("get_media_packet error : %s\n",strerror(errno)); return -1; @@ -482,16 +482,15 @@ } -static int asf_mmst_networking_seek( int fd, off_t pos, networking_t *networking ) +static int asf_mmst_networking_seek(Tcp& tcp, off_t pos, networking_t *networking ) { - return -1; - // Shut up gcc warning - fd++; - pos++; - networking=NULL; + UNUSED(tcp); + UNUSED(pos); + UNUSED(networking); + return -1; } -int asf_mmst_networking_start(net_fd_t* fd, networking_t *networking) +int asf_mmst_networking_start(Tcp& tcp, networking_t *networking) { char str[1024]; unsigned char data[BUF_SIZE]; @@ -500,12 +499,8 @@ int len, i, packet_length; char *path, *unescpath; URL_t *url1 = networking->url; - net_fd_t s = *fd; - if( s>0 ) { - closesocket( *fd ); - *fd = -1; - } + tcp.close(); /* parse url */ path = strchr(url1->file,'/') + 1; @@ -524,10 +519,10 @@ if( url1->port==0 ) { url1->port=1755; } - s = tcp_connect2Server(networking->libinput, url1->hostname, url1->port, 0); - if( s<0 ) { + tcp.open(networking->libinput, url1->hostname, url1->port, Tcp::IP4); + if( !tcp.established()) { delete path; - return s; + return -1; } MSG_INFO ("connected\n"); @@ -551,9 +546,9 @@ snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname); string_utf16 (data, str, strlen(str)); // send_command(s, commandno ....) - send_command (s, 1, 0, 0x0004000b, strlen(str) * 2+2, data); + send_command (tcp, 1, 0, 0x0004000b, strlen(str) * 2+2, data); - len = recv (s, data, BUF_SIZE, 0) ; + len = tcp.read (data, BUF_SIZE); /*This sends details of the local machine IP address to a Funnel system at the server. * Also, the TCP or UDP transport selection is sent. @@ -565,19 +560,19 @@ string_utf16 (&data[8], "\002\000\\\\192.168.0.1\\TCP\\1037", 24); memset (data, 0, 8); - send_command (s, 2, 0, 0, 24*2+10, data); + send_command (tcp, 2, 0, 0, 24*2+10, data); - len = recv (s, data, BUF_SIZE, 0) ; + len = tcp.read(data, BUF_SIZE); /* This command sends file path (at server) and file name request to the server. * 0x5 */ string_utf16 (&data[8], path, strlen(path)); memset (data, 0, 8); - send_command (s, 5, 0, 0, strlen(path)*2+10, data); + send_command (tcp, 5, 0, 0, strlen(path)*2+10, data); delete path; - get_answer (s); + get_answer (tcp); /* The ASF header chunk request. Includes ?session' variable for pre header value. * After this command is sent, @@ -587,15 +582,15 @@ memset (data, 0, 40); data[32] = 2; - send_command (s, 0x15, 1, 0, 40, data); + send_command (tcp, 0x15, 1, 0, 40, data); num_stream_ids = 0; /* get_headers(s, asf_header); */ - asf_header_len = get_header (s, asf_header, networking); + asf_header_len = get_header (tcp, asf_header, networking); // printf("---------------------------------- asf_header %d\n",asf_header); if (asf_header_len==0) { //error reading header - closesocket(s); + tcp.close(); return -1; } packet_length = interp_header (asf_header, asf_header_len); @@ -617,7 +612,7 @@ data[2] = 0xFF; data[3] = 0xFF; data[4] = mp_conf.audio_id; - send_command(s, 0x33, num_stream_ids, 0xFFFF | mp_conf.audio_id << 16, 8, data); + send_command(tcp, 0x33, num_stream_ids, 0xFFFF | mp_conf.audio_id << 16, 8, data); } else { for (i=1; i<num_stream_ids; i++) { data [ (i-1) * 6 + 2 ] = 0xFF; @@ -626,10 +621,10 @@ data [ (i-1) * 6 + 5 ] = 0x00; } - send_command (s, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data); + send_command (tcp, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data); } - get_answer (s); + get_answer (tcp); /* Start sending file from packet xx. * This command is also used for resume downloads or requesting a lost packet. @@ -644,9 +639,8 @@ data[20] = 0x04; - send_command (s, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data); + send_command (tcp, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data); - *fd = s; networking->networking_read = asf_mmst_networking_read; networking->networking_seek = asf_mmst_networking_seek; networking->buffering = 1; Modified: mplayerxp/libmpstream/asf_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_streaming.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/asf_streaming.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -28,10 +28,9 @@ #include "stream_msg.h" #if defined( ARCH_X86 ) || defined(ARCH_X86_64) -#define ASF_LOAD_GUID_PREFIX(guid) (*(uint32_t *)(guid)) +static inline uint32_t ASF_LOAD_GUID_PREFIX(uint8_t* guid) { return *(uint32_t*)guid; } #else -#define ASF_LOAD_GUID_PREFIX(guid) \ - ((guid)[3] << 24 | (guid)[2] << 16 | (guid)[1] << 8 | (guid)[0]) +static inline uint32_t ASF_LOAD_GUID_PREFIX(uint8_t* guid) { return bswap_32(*(uint32_t*)guid); } #endif // ASF networking support several network protocol. @@ -52,7 +51,7 @@ // WMP sequence is MMSU then MMST and then HTTP. // In MPlayer case since HTTP support is more reliable, // we are doing HTTP first then we try MMST if HTTP fail. -static int asf_http_networking_start(net_fd_t* fd, networking_t *networking ); +static int asf_http_networking_start(Tcp& fd, networking_t *networking ); /* ASF networking support several network protocol. @@ -74,10 +73,10 @@ In MPlayer case since HTTP support is more reliable, we are doing HTTP first then we try MMST if HTTP fail. */ -int asf_networking_start(net_fd_t* fd, networking_t *networking) { +int asf_networking_start(Tcp& tcp, networking_t *networking) { char *proto = networking->url->protocol; - *fd = -1; int port = networking->url->port; + int rc; // Is protocol even valid mms,mmsu,mmst,http,http_proxy? if (!(!strncasecmp(proto, "mmst", 4) || !strncasecmp(proto, "mmsu", 4) || @@ -91,30 +90,30 @@ if (!strncasecmp(proto, "mmsu", 4) || !strncasecmp(proto, "mms", 3)) { MSG_V("Trying ASF/UDP...\n"); //fd = asf_mmsu_networking_start( stream ); - if( *fd>-1 ) return 0; //mmsu support is not implemented yet - using this code + //mmsu support is not implemented yet - using this code MSG_V(" ===> ASF/UDP failed\n"); - if( *fd==-2 ) return -1; + return -1; } //Is protocol mms or mmst? if (!strncasecmp(proto, "mmst", 4) || !strncasecmp(proto, "mms", 3)) { MSG_V("Trying ASF/TCP...\n"); - *fd = asf_mmst_networking_start(fd,networking); + rc = asf_mmst_networking_start(tcp,networking); networking->url->port = port; - if( *fd>-1 ) return 0; + if( rc>-1 ) return 0; MSG_V(" ===> ASF/TCP failed\n"); - if( *fd==-2 ) return -1; + if( rc==-2 ) return -1; } //Is protocol http, http_proxy, or mms? if (!strncasecmp(proto, "http_proxy", 10) || !strncasecmp(proto, "http", 4) || !strncasecmp(proto, "mms", 3)) { MSG_V("Trying ASF/HTTP...\n"); - *fd = asf_http_networking_start(fd,networking); + rc = asf_http_networking_start(tcp,networking); networking->url->port = port; - if( *fd>-1 ) return 0; + if( rc>-1 ) return 0; MSG_V(" ===> ASF/HTTP failed\n"); - if( *fd==-2 ) return -1; + if( rc==-2 ) return -1; } //everything failed return -1; @@ -186,7 +185,7 @@ } static int -asf_networking_parse_header(int fd, networking_t* networking) { +asf_networking_parse_header(Tcp& tcp, networking_t* networking) { ASF_header_t asfh; ASF_stream_chunck_t chunk; asf_http_networking_t* asf_ctrl = (asf_http_networking_t*) networking->data; @@ -206,7 +205,7 @@ // So we need to retrieve all the chunk before starting to parse the header. do { for( r=0; r < (int)sizeof(ASF_stream_chunck_t) ; ) { - i = nop_networking_read(fd,((char*)&chunk)+r,sizeof(ASF_stream_chunck_t) - r,networking); + i = nop_networking_read(tcp,((char*)&chunk)+r,sizeof(ASF_stream_chunck_t) - r,networking); if(i <= 0) return -1; r += i; } @@ -239,7 +238,7 @@ buffer_size += size; for(r = 0; r < size;) { - i = nop_networking_read(fd,buffer+r,size-r,networking); + i = nop_networking_read(tcp,buffer+r,size-r,networking); if(i < 0) { MSG_ERR("Error while reading network stream\n"); return -1; @@ -438,7 +437,7 @@ } static int -asf_http_networking_read( int fd, char *buffer, int size, networking_t *networking ) { +asf_http_networking_read( Tcp& tcp, char *buffer, int size, networking_t *networking ) { static ASF_stream_chunck_t chunk; int read,chunk_size = 0; static int rest = 0, drop_chunk = 0, waiting = 0; @@ -448,7 +447,7 @@ if (rest == 0 && waiting == 0) { read = 0; while(read < (int)sizeof(ASF_stream_chunck_t)){ - int r = nop_networking_read( fd, ((char*)&chunk) + read, + int r = nop_networking_read( tcp, ((char*)&chunk) + read, sizeof(ASF_stream_chunck_t)-read, networking ); if(r <= 0){ @@ -490,7 +489,7 @@ chunk_size = size; } while(read < chunk_size) { - int got = nop_networking_read( fd,buffer+read,chunk_size-read,networking ); + int got = nop_networking_read( tcp,buffer+read,chunk_size-read,networking ); if(got <= 0) { if(got < 0) MSG_ERR("Error while reading chunk\n"); @@ -514,12 +513,11 @@ } static int -asf_http_networking_seek( int fd, off_t pos, networking_t *networking ) { - return -1; - // to shut up gcc warning - fd++; - pos++; - networking=NULL; +asf_http_networking_seek( Tcp& tcp, off_t pos, networking_t *networking ) { + UNUSED(tcp); + UNUSED(pos); + UNUSED(networking); + return -1; } static int @@ -743,7 +741,7 @@ return 0; } -static int asf_http_networking_start(net_fd_t* fd, networking_t *networking) { +static int asf_http_networking_start(Tcp& tcp, networking_t *networking) { HTTP_header_t *http_hdr=NULL; URL_t *url = networking->url; asf_http_networking_t *asf_http_ctrl; @@ -765,20 +763,20 @@ do { done = 1; - if( *fd>0 ) closesocket( *fd ); + tcp.close(); if( !strcasecmp( url->protocol, "http_proxy" ) ) { if( url->port==0 ) url->port = 8080; } else { if( url->port==0 ) url->port = 80; } - *fd = tcp_connect2Server(networking->libinput, url->hostname, url->port, 0); - if( *fd<0 ) return 0; + tcp.open(networking->libinput, url->hostname, url->port, Tcp::IP4); + if( !tcp.established()) return 0; http_hdr = asf_http_request( networking ); MSG_DBG2("Request [%s]\n", http_hdr->buffer ); for(i=0; i < (int)http_hdr->buffer_size ; ) { - int r = send( *fd, http_hdr->buffer+i, http_hdr->buffer_size-i, 0); + int r = tcp.write((uint8_t*)(http_hdr->buffer+i), http_hdr->buffer_size-i); if(r <0) { MSG_ERR("Socket write error : %s\n",strerror(errno)); return -1; @@ -788,7 +786,7 @@ http_free( http_hdr ); http_hdr = http_new_header(); do { - i = recv( *fd, buffer, BUFFER_SIZE, 0); + i = tcp.read((uint8_t*)buffer, BUFFER_SIZE); if( i<=0 ) { perror("read"); http_free( http_hdr ); @@ -819,7 +817,7 @@ if( asf_http_ctrl->request==1 ) { if( asf_http_ctrl->networking_type!=ASF_PlainText_e ) { // First request, we only got the ASF header. - ret = asf_networking_parse_header(*fd,networking); + ret = asf_networking_parse_header(tcp,networking); if(ret < 0) return -1; if(asf_http_ctrl->n_audio == 0 && asf_http_ctrl->n_video == 0) { MSG_ERR("No stream found\n"); @@ -850,14 +848,13 @@ case ASF_Unknown_e: default: MSG_ERR("Unknown ASF networking type\n"); - closesocket(*fd); + tcp.close(); http_free( http_hdr ); return -1; } // Check if we got a redirect. } while(!done); - fd = fd; if( asf_http_ctrl->networking_type==ASF_PlainText_e || asf_http_ctrl->networking_type==ASF_Redirector_e ) { networking->networking_read = nop_networking_read; networking->networking_seek = nop_networking_seek; Modified: mplayerxp/libmpstream/asf_streaming.h =================================================================== --- mplayerxp/libmpstream/asf_streaming.h 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/asf_streaming.h 2012-12-07 14:29:41 UTC (rev 516) @@ -2,8 +2,10 @@ #define __ASF_STEAMING_H_INCLUDED 1 #include "stream.h" -typedef int net_fd_t; -extern int asf_networking_start(net_fd_t* fd, networking_t *networking); -extern int asf_mmst_networking_start(net_fd_t* fd, networking_t *networking); +namespace mpxp { + class Tcp; +} +extern int asf_networking_start(Tcp& fd, networking_t *networking); +extern int asf_mmst_networking_start(Tcp& fd, networking_t *networking); #endif Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -271,7 +271,7 @@ int ss=stream->sector_size()>1?stream->sector_size():STREAM_BUFFER_SIZE; cache_vars_t* c; - if (!(stream->type()&STREAMTYPE_SEEKABLE) && stream->fd < 0) { + if (!(stream->type()&STREAMTYPE_SEEKABLE)) { // The stream has no 'fd' behind it, so is non-cacheable MSG_WARN("\rThis stream is non-cacheable\n"); return 1; Modified: mplayerxp/libmpstream/cddb.cpp =================================================================== --- mplayerxp/libmpstream/cddb.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/cddb.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -44,6 +44,7 @@ #include "libmpconf/cfgparser.h" #include "cdd.h" +#include "tcp.h" #include "version.h" #include "network.h" #include "stream_msg.h" @@ -142,7 +143,8 @@ int __FASTCALL__ cddb_http_request(const char *command, int (*reply_parser)(HTTP_header_t*,cddb_data_t*), cddb_data_t *cddb_data) { char request[4096]; - int fd, ret = 0; + int ret = 0; + Tcp* tcp; URL_t *url; HTTP_header_t *http_hdr; @@ -157,15 +159,16 @@ return -1; } - fd = http_send_request(cddb_data->libinput,url,0); - if( fd<0 ) { + tcp = http_send_request(cddb_data->libinput,url,0); + if( !tcp ) { MSG_ERR("failed to send the http request\n"); return -1; } - http_hdr = http_read_response( fd ); + http_hdr = http_read_response( *tcp ); if( http_hdr==NULL ) { MSG_ERR("Failed to read the http response\n"); + delete tcp; return -1; } @@ -185,6 +188,7 @@ http_free( http_hdr ); url_free( url ); + delete tcp; return ret; } Modified: mplayerxp/libmpstream/librtsp/rtsp.cpp =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/librtsp/rtsp.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -54,6 +54,7 @@ #include <sys/types.h> #include <inttypes.h> +#include "tcp.h" #include "rtsp.h" #include "rtsp_session.h" #include "osdep/timer.h" @@ -69,7 +70,7 @@ struct rtsp_s { - int s; + Tcp* tcp; char *host; int port; @@ -117,14 +118,14 @@ * network utilities */ -static int write_stream(int s, const char *buf, int len) { +static int write_stream(Tcp& tcp, const char *buf, int len) { int total, timeout; total = 0; timeout = 30; while (total < len){ int n; - n = send (s, &buf[total], len - total, 0); + n = tcp.write((uint8_t*)(&buf[total]), len - total); if (n > 0) total += n; @@ -143,7 +144,7 @@ return total; } -static ssize_t read_stream(int fd, any_t*buf, size_t count) { +static ssize_t read_stream(Tcp& tcp, any_t*buf, size_t count) { ssize_t ret, total; @@ -151,30 +152,13 @@ while (total < count) { - ret=recv (fd, ((uint8_t*)buf)+total, count-total, 0); + ret=tcp.read(((uint8_t*)buf)+total, count-total); if (ret<0) { - if(errno == EAGAIN) { - fd_set rset; - struct timeval timeout; + if(errno == EAGAIN) if(!tcp.has_data(0)) return -1; + continue; + } else total += ret; - FD_ZERO (&rset); - FD_SET (fd, &rset); - - timeout.tv_sec = 30; - timeout.tv_usec = 0; - - if (select (fd+1, &rset, NULL, NULL, &timeout) <= 0) { - return -1; - } - continue; - } - - MSG_ERR("rtsp: read error.\n"); - return ret; - } else - total += ret; - /* end of stream */ if (!ret) break; } @@ -193,9 +177,9 @@ char *buffer = new char [BUF_SIZE]; char *string = NULL; - read_stream(s->s, buffer, 1); + read_stream(*s->tcp, buffer, 1); while (n<BUF_SIZE) { - read_stream(s->s, &(buffer[n]), 1); + read_stream(*s->tcp, &(buffer[n]), 1); if ((buffer[n-1]==0x0d)&&(buffer[n]==0x0a)) break; n++; } @@ -233,7 +217,7 @@ buf[len]=0x0d; buf[len+1]=0x0a; - write_stream(s->s, buf, len+2); + write_stream(*s->tcp, buf, len+2); #ifdef LOG MSG_INFO(" done.\n"); @@ -522,7 +506,7 @@ int i,seq; if (size>=4) { - i=read_stream(s->s, buffer, 4); + i=read_stream(*s->tcp, buffer, 4); if (i<4) return i; if (((buffer[0]=='S')&&(buffer[1]=='E')&&(buffer[2]=='T')&&(buffer[3]=='_')) || ((buffer[0]=='O')&&(buffer[1]=='P')&&(buffer[2]=='T')&&(buffer[3]=='I'))) // OPTIONS @@ -554,14 +538,14 @@ rtsp_put(s, rest); delete rest; rtsp_put(s, ""); - i=read_stream(s->s, buffer, size); + i=read_stream(*s->tcp, buffer, size); } else { - i=read_stream(s->s, buffer+4, size-4); + i=read_stream(*s->tcp, buffer+4, size-4); i+=4; } } else - i=read_stream(s->s, buffer, size); + i=read_stream(*s->tcp, buffer, size); #ifdef LOG MSG_INFO("librtsp: << %d of %d bytes\n", i, size); #endif @@ -574,7 +558,7 @@ */ //rtsp_t *rtsp_connect(const char *mrl, const char *user_agent) { -rtsp_t *rtsp_connect(int fd, char* mrl, char *path, char *host, int port, char *user_agent) { +rtsp_t *rtsp_connect(Tcp& tcp, char* mrl, char *path, char *host, int port, char *user_agent) { rtsp_t *s=new rtsp_t; int i; @@ -604,9 +588,9 @@ path++; if ((s->param = strchr(s->path, '?')) != NULL) s->param++; - s->s = fd; + s->tcp = &tcp; - if (s->s < 0) { + if (!tcp.established()) { MSG_ERR("rtsp: failed to connect to '%s'\n", s->host); rtsp_close(s); return NULL; @@ -640,7 +624,7 @@ { if (s->server_state == RTSP_PLAYING) rtsp_request_teardown (s, NULL); - closesocket (s->s); + s->tcp->close(); } if (s->path) delete s->path; Modified: mplayerxp/libmpstream/librtsp/rtsp.h =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp.h 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/librtsp/rtsp.h 2012-12-07 14:29:41 UTC (rev 516) @@ -47,7 +47,7 @@ typedef struct rtsp_s rtsp_t; -rtsp_t* rtsp_connect (int fd, char *mrl, char *path, char *host, int port, char *user_agent); +rtsp_t* rtsp_connect (Tcp& tcp, char *mrl, char *path, char *host, int port, char *user_agent); int rtsp_request_options(rtsp_t *s, const char *what); int rtsp_request_describe(rtsp_t *s, const char *what); Modified: mplayerxp/libmpstream/librtsp/rtsp_session.cpp =================================================================== --- mplayerxp/libmpstream/librtsp/rtsp_session.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/librtsp/rtsp_session.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -47,6 +47,7 @@ #include <string.h> #include <inttypes.h> +#include "tcp.h" #include "url.h" #include "rtp.h" #include "rtsp.h" @@ -77,7 +78,7 @@ }; //rtsp_session_t *rtsp_session_start(char *mrl) { -rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, +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) { rtsp_session_t *rtsp_session = NULL; @@ -94,7 +95,7 @@ *redir = 0; /* connect to server */ - rtsp_session->s=rtsp_connect(fd,*mrl,path,host,port,NULL); + rtsp_session->s=rtsp_connect(tcp,*mrl,path,host,port,NULL); if (!rtsp_session->s) { MSG_ERR("rtsp_session: failed to connect to server %s\n", path); @@ -266,8 +267,9 @@ else if (self->rtp_session) { int l = 0; + Tcp tcp(self->rtp_session->rtp_socket); - l = read_rtp_from_server (self->rtp_session->rtp_socket, 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-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/librtsp/rtsp_session.h 2012-12-07 14:29:41 UTC (rev 516) @@ -33,7 +33,7 @@ typedef struct rtsp_session_s rtsp_session_t; -rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, +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(rtsp_session_t *session, char *data, int len); Modified: mplayerxp/libmpstream/network.cpp =================================================================== --- mplayerxp/libmpstream/network.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/network.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -166,11 +166,11 @@ return url_out; } -net_fd_t http_send_request(libinput_t* libinput, URL_t *url, off_t pos ) { +Tcp* http_send_request(libinput_t* libinput, URL_t *url, off_t pos ) { HTTP_header_t *http_hdr; URL_t *server_url; char str[256]; - net_fd_t fd=-1; + Tcp* tcp=NULL; int ret; int proxy = 0; // Boolean @@ -215,19 +215,17 @@ if( proxy ) { if( url->port==0 ) url->port = 8080; // Default port for the proxy server - fd = tcp_connect2Server(libinput, url->hostname, url->port, 0); + tcp = new Tcp(libinput, url->hostname, url->port, Tcp::IP4); url_free( server_url ); server_url = NULL; } else { if( server_url->port==0 ) server_url->port = 80; // Default port for the web server - fd = tcp_connect2Server(libinput, server_url->hostname, server_url->port, 0); + tcp = new Tcp(libinput, server_url->hostname, server_url->port, Tcp::IP4); } - if( fd<0 ) { - goto err_out; - } + if(!tcp->established()) goto err_out; MSG_DBG2("Request: [%s]\n", http_hdr->buffer ); - ret = send( fd, http_hdr->buffer, http_hdr->buffer_size, 0); + ret = tcp->write((uint8_t*)(http_hdr->buffer), http_hdr->buffer_size); if( ret!=(int)http_hdr->buffer_size ) { MSG_ERR("Error while sending HTTP request: didn't sent all the request\n"); goto err_out; @@ -235,17 +233,16 @@ http_free( http_hdr ); - return fd; + return tcp; err_out: - if (fd > 0) closesocket(fd); + if (tcp) delete tcp; http_free(http_hdr); if (proxy && server_url) url_free(server_url); - return -1; + return NULL; } -HTTP_header_t * -http_read_response( int fd ) { +HTTP_header_t* http_read_response( Tcp& tcp ) { HTTP_header_t *http_hdr; char response[BUFFER_SIZE]; int i; @@ -256,7 +253,7 @@ } do { - i = recv( fd, response, BUFFER_SIZE, 0); + i = tcp.read((uint8_t*)response, BUFFER_SIZE); if( i<0 ) { MSG_ERR("Read failed\n"); http_free( http_hdr ); @@ -324,46 +321,48 @@ return 0; } -off_t http_seek(net_fd_t* fd, networking_t *networking, off_t pos ) { - HTTP_header_t *http_hdr = NULL; +off_t http_seek(Tcp& tcp, networking_t *networking, off_t pos ) { + HTTP_header_t *http_hdr = NULL; + Tcp* other_tcp; - if( *fd>0 ) closesocket(*fd); // need to reconnect to seek in http-stream - *fd = http_send_request(networking->libinput, networking->url, pos ); - if( *fd<0 ) return 0; + tcp.close(); + other_tcp = http_send_request(networking->libinput, networking->url, pos ); + if(! other_tcp->established() ) return 0; + tcp=*other_tcp; + delete other_tcp; - http_hdr = http_read_response( *fd ); + http_hdr = http_read_response(tcp); - if( http_hdr==NULL ) return 0; + if( http_hdr==NULL ) return 0; - switch( http_hdr->status_code ) { - case 200: - case 206: // OK - MSG_V("Content-Type: [%s]\n", http_get_field(http_hdr, "Content-Type") ); - MSG_V("Content-Length: [%s]\n", http_get_field(http_hdr, "Content-Length") ); - if( http_hdr->body_size>0 ) { - if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { - http_free( http_hdr ); - return 0; - } - } - break; - default: - MSG_ERR("Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase ); - close( *fd ); - *fd = -1; - } + switch( http_hdr->status_code ) { + case 200: + case 206: // OK + MSG_V("Content-Type: [%s]\n", http_get_field(http_hdr, "Content-Type") ); + MSG_V("Content-Length: [%s]\n", http_get_field(http_hdr, "Content-Length") ); + if( http_hdr->body_size>0 ) { + if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { + http_free( http_hdr ); + return 0; + } + } + break; + default: + MSG_ERR("Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase ); + tcp.close(); + } - if( http_hdr ) { - http_free( http_hdr ); - networking->data = NULL; - } + if( http_hdr ) { + http_free( http_hdr ); + networking->data = NULL; + } - return pos; + return pos; } // By using the protocol, the extension of the file or the content-type // we might be able to guess the networking type. -int autodetectProtocol(networking_t *networking, net_fd_t *fd_out) { +int autodetectProtocol(networking_t *networking, Tcp& tcp) { HTTP_header_t *http_hdr=NULL; unsigned int i; int fd=-1; @@ -377,7 +376,6 @@ URL_t *url = networking->url; do { - *fd_out = -1; next_url = NULL; extension = NULL; content_type = NULL; @@ -401,12 +399,11 @@ #endif // HTTP based protocol if( !strcasecmp(url->protocol, "http") || !strcasecmp(url->protocol, "http_proxy") ) { - fd = http_send_request(networking->libinput, url, 0 ); - if( fd<0 ) goto err_out; + tcp = *http_send_request(networking->libinput, url, 0 ); + if(!tcp.established()) goto err_out; - http_hdr = http_read_response( fd ); + http_hdr = http_read_response(tcp); if( http_hdr==NULL ) goto err_out; - *fd_out=fd; if( mp_conf.verbose ) http_debug_hdr( http_hdr ); networking->data = (any_t*)http_hdr; @@ -525,7 +522,7 @@ } int -nop_networking_read( int fd, char *buffer, int size, networking_t *stream_ctrl ) { +nop_networking_read(Tcp& tcp, char *buffer, int size, networking_t *stream_ctrl ) { int len=0; //printf("nop_networking_read\n"); if( stream_ctrl->buffer_size!=0 ) { @@ -546,7 +543,7 @@ } if( len<size ) { int ret; - ret = read( fd, buffer+len, size-len ); + ret = tcp.read((uint8_t*)(buffer+len), size-len); if( ret<0 ) { MSG_ERR("nop_networking_read error : %s\n",strerror(errno)); } @@ -557,21 +554,24 @@ } int -nop_networking_seek( int fd, off_t pos, networking_t *stream_ctrl ) { +nop_networking_seek(Tcp& tcp, off_t pos, networking_t *n ) { + UNUSED(tcp); + UNUSED(pos); + UNUSED(n); return -1; } int -nop_networking_start(net_fd_t *fd,networking_t* networking ) { +nop_networking_start(Tcp& tcp,networking_t* networking ) { HTTP_header_t *http_hdr = NULL; char *next_url=NULL; URL_t *rd_url=NULL; int ret; - if( *fd<0 ) { - *fd = http_send_request(networking->libinput, networking->url,0); - if( *fd<0 ) return -1; - http_hdr = http_read_response( *fd ); + if( !tcp.established() ) { + tcp = *http_send_request(networking->libinput, networking->url,0); + if( !tcp.established() ) return -1; + http_hdr = http_read_response(tcp); if( http_hdr==NULL ) return -1; switch( http_hdr->status_code ) { @@ -597,11 +597,10 @@ if (next_url != NULL && rd_url != NULL) { MSG_STATUS("Redirected: Using this url instead %s\n",next_url); networking->url=check4proxies(rd_url); - ret=nop_networking_start(fd,networking); //recursively get networking started + ret=nop_networking_start(tcp,networking); //recursively get networking started } else { MSG_ERR("Redirection failed\n"); - closesocket( *fd ); - *fd = -1; + tcp.close(); } return ret; break; @@ -611,8 +610,7 @@ case 500: //Server Error default: MSG_ERR("Server return %d: %s\n", http_hdr->status_code, http_hdr->reason_phrase ); - closesocket( *fd ); - *fd = -1; + tcp.close(); return -1; break; } @@ -653,20 +651,20 @@ } int -pnm_networking_read( int fd, char *buffer, int size, networking_t *stream_ctrl ) { +pnm_networking_read(Tcp& tcp, char *buffer, int size, networking_t *stream_ctrl ) { + UNUSED(tcp); return pnm_read(reinterpret_cast<pnm_t*>(stream_ctrl->data), buffer, size); } -int pnm_networking_start(net_fd_t *fd,networking_t *networking ) { +int pnm_networking_start(Tcp& tcp,networking_t *networking ) { pnm_t *pnm; - *fd = tcp_connect2Server(networking->libinput, networking->url->hostname, - networking->url->port ? networking->url->port : 7070, 0); - MSG_V("PNM:// fd=%d\n",fd); - if(*fd<0) return -1; + tcp.open(networking->libinput, networking->url->hostname, + networking->url->port ? networking->url->port : 7070); + if(!tcp.established()) return -1; - pnm = pnm_connect(fd,networking->url->file); + pnm = pnm_connect(tcp,networking->url->file); if(!pnm) return -2; networking->data=pnm; @@ -737,16 +735,18 @@ #ifndef STREAMING_LIVE_DOT_COM static int -rtp_networking_read( int fd, char *buffer, int size, networking_t *networking ) { - return read_rtp_from_server( fd, buffer, size ); +rtp_networking_read(Tcp& tcp, char *buffer, int size, networking_t *networking ) { + UNUSED(networking); + return read_rtp_from_server(tcp, buffer, size ); } static int -rtp_networking_start( net_fd_t* fd,networking_t* networking, int raw_udp ) { +rtp_networking_start(Tcp& tcp,networking_t* networking, int raw_udp ) { - if( *fd<0 ) { - *fd = udp_open_socket( (networking->url) ); - if( *fd<0 ) return -1; + if( !tcp.established() ) { + Udp* udp(new(zeromem) Udp(networking->url)); + tcp = udp->socket(); + if( !tcp.established()) return -1; } if(raw_udp) @@ -762,12 +762,12 @@ } #endif -int networking_start(net_fd_t* fd,networking_t* networking, URL_t *url) { +int networking_start(Tcp& tcp,networking_t* networking, URL_t *url) { int ret; networking->url = check4proxies( url ); - ret = autodetectProtocol( networking, fd); + ret = autodetectProtocol( networking, tcp); if( ret<0 ) return -1; ret = -1; @@ -777,15 +777,11 @@ // For RTP streams, we usually don't know the stream type until we open it. if( !strcasecmp( networking->url->protocol, "rtp")) { - if(*fd >= 0) { - if(closesocket(*fd) < 0) - MSG_ERR("networking_start : Closing socket %d failed %s\n",*fd,strerror(errno)); - } - *fd = -1; - ret = rtp_networking_start(fd, networking, 0); + if(tcp.established()) tcp.close(); + ret = rtp_networking_start(tcp, networking, 0); } else if( !strcasecmp( networking->url->protocol, "pnm")) { - *fd = -1; - ret = pnm_networking_start(fd, networking); + tcp.close(); + ret = pnm_networking_start(tcp, networking); if (ret == -1) { MSG_INFO("Can't connect with pnm, retrying with http.\n"); return -1; @@ -794,10 +790,10 @@ #ifdef HAVE_RTSP_SESSION_H else if( !strcasecmp( networking->url->protocol, "rtsp")) { *fd = -1; - if ((ret = realrtsp_networking_start( fd, networking )) < 0) { + if ((ret = realrtsp_networking_start( tcp, networking )) < 0) { MSG_INFO("Not a Realmedia rtsp url. Trying standard rtsp protocol.\n"); #ifdef STREAMING_LIVE_DOT_COM - ret = rtsp_networking_start( stream ); + ret = rtsp_networking_start( tcp, networking ); if( ret<0 ) MSG_ERR("rtsp_networking_start failed\n"); return ret; #else @@ -808,8 +804,8 @@ } #endif else if(!strcasecmp( networking->url->protocol, "udp")) { - *fd = -1; - ret = rtp_networking_start(fd, networking, 1); + tcp.close(); + ret = rtp_networking_start(tcp, networking, 1); if(ret<0) { MSG_ERR("rtp_networking_start(udp) failed\n"); return -1; @@ -820,16 +816,15 @@ // ASF raw stream is encapsulated. // It can also be a playlist (redirector) // so we need to pass demuxer_type too - ret = asf_networking_start(fd,networking); + ret = asf_networking_start(tcp,networking); if( ret<0 ) { //sometimes a file is just on a webserver and it is not streamed. //try loading them default method as last resort for http protocol if ( !strcasecmp(networking->url->protocol, "http") ) { MSG_STATUS("Trying default networking for http protocol\n "); //reset stream - close(*fd); - *fd=-1; - ret=nop_networking_start(fd,networking); + tcp.close(); + ret=nop_networking_start(tcp,networking); } if (ret<0) { MSG_ERR("asf_networking_start failed\n"); Modified: mplayerxp/libmpstream/network.h =================================================================== --- mplayerxp/libmpstream/network.h 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/network.h 2012-12-07 14:29:41 UTC (rev 516) @@ -28,8 +28,8 @@ namespace mpxp { struct stream_t; struct libinput_t; + class Tcp; } -typedef int net_fd_t; enum networking_status { networking_stopped_e, networking_playing_e @@ -44,24 +44,24 @@ unsigned int buffer_size; unsigned int buffer_pos; unsigned int bandwidth; // The downstream available - int (*networking_read)( net_fd_t fd, char *buffer, int buffer_size, networking_t *stream_ctrl ); - int (*networking_seek)( net_fd_t fd, off_t pos, networking_t *stream_ctrl ); + int (*networking_read)( Tcp& fd, char *buffer, int buffer_size, networking_t *stream_ctrl ); + int (*networking_seek)( Tcp& fd, off_t pos, networking_t *stream_ctrl ); any_t*data; libinput_t* libinput; /**< provides possibility to inperrupt network streams */ }; extern void fixup_network_stream_cache(networking_t *s); -extern int networking_start(net_fd_t* fd,networking_t *n, URL_t *url); +extern int networking_start(Tcp& fd,networking_t *n, URL_t *url); extern int networking_bufferize(networking_t *networking,unsigned char *buffer, int size); extern networking_t *new_networking(libinput_t* libinput); extern void free_networking( networking_t *networking ); extern URL_t* check4proxies( URL_t *url ); -int nop_networking_read( net_fd_t fd, char *buffer, int size, networking_t *stream_ctrl ); -int nop_networking_seek( net_fd_t fd, off_t pos, networking_t *stream_ctrl ); +int nop_networking_read(Tcp& fd, char *buffer, int size, networking_t *stream_ctrl ); +int nop_networking_seek(Tcp& fd, off_t pos, networking_t *stream_ctrl ); -int http_send_request(libinput_t* libinput,URL_t *url, off_t pos); -HTTP_header_t *http_read_response(net_fd_t fd); +Tcp* http_send_request(libinput_t* libinput,URL_t *url, off_t pos); +HTTP_header_t *http_read_response(Tcp& fd); int http_authenticate(HTTP_header_t *http_hdr, URL_t *url, int *auth_retry); Modified: mplayerxp/libmpstream/pnm.cpp =================================================================== --- mplayerxp/libmpstream/pnm.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/pnm.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -47,6 +47,7 @@ #include <winsock2.h> #endif +#include "tcp.h" #include "pnm.h" #define FOURCC_TAG( ch0, ch1, ch2, ch3 ) \ @@ -72,7 +73,7 @@ #define HEADER_SIZE 4096 struct pnm_s { - net_fd_t s; + Tcp* tcp; char* path; char buffer[BUF_SIZE]; /* scratch buffer */ /* receive buffer */ @@ -94,11 +95,11 @@ * utility macros */ -#define BE_16(x) be2me_16(*((uint16_t *)x)) -#define BE_32(x) be2me_16(*((uint32_t *)x)) +static inline uint16_t BE_16(uint8_t* x) { return be2me_16(*((uint16_t *)x)); } +static inline uint32_t BE_32(uint8_t* x) { return be2me_32(*((uint32_t *)x)); } /* D means direct (no pointer) */ -#define BE_16D(x) BE_16(x) +static inline uint16_t BE_16D(uint8_t* x) { return BE_16(x); } /* sizes */ #define PREAMBLE_SIZE 8 @@ -194,14 +195,14 @@ static void hexdump (char *buf, int length); -static int rm_write(int s, const char *buf, int len) { +static int rm_write(Tcp& tcp, const char *buf, int len) { int total, timeout; total = 0; timeout = 30; while (total < len){ int n; - n = send (s, &buf[total], len - total, 0); + n = tcp.write ((const uint8_t*)&buf[total], len - total); if (n > 0) total += n; @@ -220,7 +221,7 @@ return total; } -static ssize_t rm_read(int fd, any_t*buf, size_t count) { +static ssize_t rm_read(Tcp& tcp, any_t*buf, size_t count) { ssize_t ret, total; @@ -228,21 +229,8 @@ while (total < count) { - fd_set rset; - struct timeval timeout; + ret=tcp.read (((uint8_t*)buf)+total, count-total); - FD_ZERO (&rset); - FD_SET (fd, &rset); - - timeout.tv_sec = 3; - timeout.tv_usec = 0; - - if (select (fd+1, &rset, NULL, NULL, &timeout) <= 0) { - return -1; - } - - ret=recv (fd, ((uint8_t*)buf)+total, count-total, 0); - if (ret<=0) { printf ("input_pnm: read error.\n"); return ret; @@ -306,16 +294,16 @@ return -1; /* get first PREAMBLE_SIZE bytes and ignore checksum */ - rm_read (p->s, data, CHECKSUM_SIZE); + rm_read (*p->tcp, data, CHECKSUM_SIZE); if (data[0] == 0x72) - rm_read (p->s, data, PREAMBLE_SIZE); + rm_read (*p->tcp, data, PREAMBLE_SIZE); else - rm_read (p->s, data+CHECKSUM_SIZE, PREAMBLE_SIZE-CHECKSUM_SIZE); + rm_read (*p->tcp, data+CHECKSUM_SIZE, PREAMBLE_SIZE-CHECKSUM_SIZE); max -= PREAMBLE_SIZE; - *chunk_type = BE_32(data); - chunk_size = BE_32(data+4); + *chunk_type = BE_32((uint8_t*)data); + chunk_size = BE_32((uint8_t*)(data+4)); switch (*chunk_type) { case PNA_TAG: @@ -323,7 +311,7 @@ ptr=data+PREAMBLE_SIZE; if (max < 1) return -1; - rm_read (p->s, ptr++, 1); + rm_read (*p->tcp, ptr++, 1); max -= 1; while(1) { @@ -331,19 +319,19 @@ if (max < 2) return -1; - rm_read (p->s, ptr, 2); + rm_read (*p->tcp, ptr, 2); max -= 2; if (*ptr == 'X') /* checking for server message */ { printf("input_pnm: got a message from server:\n"); if (max < 1) return -1; - rm_read (p->s, ptr+2, 1); + rm_read (*p->tcp, ptr+2, 1); max = -1; - n=BE_16(ptr+1); + n=BE_16((uint8_t*)(ptr+1)); if (max < n) return -1; - rm_read (p->s, ptr+3, n); + rm_read (*p->tcp, ptr+3, n); max -= n; ptr[3+n]=0; printf("%s\n",ptr+3); @@ -365,14 +353,14 @@ n=ptr[1]; if (max < n) return -1; - rm_read (p->s, ptr+2, n); + rm_read (*p->tcp, ptr+2, n); max -= n; ptr+=(n+2); } /* the checksum of the next chunk is ignored here */ if (max < 1) return -1; - rm_read (p->s, ptr+2, 1); + rm_read (*p->tcp, ptr+2, 1); ptr+=3; chunk_size=ptr-data; break; @@ -384,12 +372,12 @@ if (chunk_size > max || chunk_size < PREAMBLE_SIZE) { printf("error: max chunk size exeeded (max was 0x%04x)\n", max); #ifdef LOG - n=rm_read (p->s, &data[PREAMBLE_SIZE], 0x100 - PREAMBLE_SIZE); + n=rm_read (*p->tcp, &data[PREAMBLE_SIZE], 0x100 - PREAMBLE_SIZE); hexdump(data,n+PREAMBLE_SIZE); #endif return -1; } - rm_read (p->s, &data[PREAMBLE_SIZE], chunk_size-PREAMBLE_SIZE); + rm_read (*p->tcp, &data[PREAMBLE_SIZE], chunk_size-PREAMBLE_SIZE); break; default: *chunk_type = 0; @@ -457,7 +445,7 @@ /* client id string */ p->buffer[c]=PNA_CLIENT_STRING; - i16=BE_16D((strlen(client_string)-1)); /* dont know why do we have -1 here */ + i16=BE_16D((uint8_t*)((strlen(client_string)-1))); /* dont know why do we have -1 here */ memcpy(&p->buffer[c+1],&i16,2); memcpy(&p->buffer[c+3],client_string,strlen(client_string)+1); c=c+3+strlen(client_string)+1; @@ -465,7 +453,7 @@ /* file path */ p->buffer[c]=0; p->buffer[c+1]=PNA_PATH_REQUEST; - i16=BE_16D(strlen(p->path)); + i16=BE_16D((uint8_t*)(strlen(p->path))); memcpy(&p->buffer[c+2],&i16,2); memcpy(&p->buffer[c+4],p->path,strlen(p->path)); c=c+4+strlen(p->path); @@ -474,7 +462,7 @@ p->buffer[c]='y'; p->buffer[c+1]='B'; - rm_write(p->s,p->buffer,c+2); + rm_write(*p->tcp,p->buffer,c+2); } /* @@ -491,7 +479,7 @@ memcpy(&p->buffer[3], response, size); - rm_write (p->s, p->buffer, size+3); + rm_write (*p->tcp, p->buffer, size+3); } @@ -554,7 +542,7 @@ /* read challenge */ memcpy (p->buffer, ptr, PREAMBLE_SIZE); - rm_read (p->s, &p->buffer[PREAMBLE_SIZE], 64); + rm_read (*p->tcp, &p->buffer[PREAMBLE_SIZE], 64); /* now write a data header */ memcpy(ptr, pnm_data_header, PNM_DATA_HEADER_SIZE); @@ -650,7 +638,7 @@ /* realplayer seems to do that every 43th package */ if ((p->packet%43) == 42) { - rm_write(p->s,&keepalive,1); + rm_write(*p->tcp,&keepalive,1); } /* data chunks begin with: 'Z' <o> <o> <i1> 'Z' <i2> @@ -659,13 +647,13 @@ * <i2> is a 8 bit index which counts from 0x10 to somewhere */ - n = rm_read (p->s, p->buffer, 8); + n = rm_read (*p->tcp, p->buffer, 8); if (n<8) return 0; /* skip 8 bytes if 0x62 is read */ if (p->buffer[0] == 0x62) { - n = rm_read (p->s, p->buffer, 8); + n = rm_read (*p->tcp, p->buffer, 8); if (n<8) return 0; #ifdef LOG printf("input_pnm: had to seek 8 bytes on 0x62\n"); @@ -675,9 +663,9 @@ /* a server message */ if (p->buffer[0] == 'X') { - int size=BE_16(&p->buffer[1]); + int size=BE_16((uint8_t*)(&p->buffer[1])); - rm_read (p->s, &p->buffer[8], size-5); + rm_read (*p->tcp, &p->buffer[8], size-5); p->buffer[size+3]=0; printf("input_pnm: got message from server while reading stream:\n%s\n", &p->buffer[3]); return 0; @@ -698,7 +686,7 @@ for (i=1; i<8; i++) { p->buffer[i-1]=p->buffer[i]; } - rm_read (p->s, &p->buffer[7], 1); + rm_read (*p->tcp, &p->buffer[7], 1); n++; } @@ -715,8 +703,8 @@ } /* check offsets */ - fof1=BE_16(&p->buffer[1]); - fof2=BE_16(&p->buffer[3]); + fof1=BE_16((uint8_t*)(&p->buffer[1])); + fof2=BE_16((uint8_t*)(&p->buffer[3])); if (fof1 != fof2) { printf("input_pnm: frame offsets are different: 0x%04x 0x%04x\n",fof1,fof2); @@ -724,10 +712,10 @@ } /* get first index */ - p->seq_current[0]=BE_16(&p->buffer[5]); + p->seq_current[0]=BE_16((uint8_t*)(&p->buffer[5])); /* now read the rest of stream chunk */ - n = rm_read (p->s, &p->recv[5], fof1-5); + n = rm_read (*p->tcp, &p->recv[5], fof1-5); if (n<(fof1-5)) return 0; /* get second index */ @@ -747,7 +735,7 @@ p->recv[0]=0; /* object version */ p->recv[1]=0; - fof2=BE_16(&fof2); + fof2=BE_16((uint8_t*)(&fof2)); memcpy(&p->recv[2], &fof2, 2); /*p->recv[2]=(fof2>>8)%0xff;*/ /* length */ /*p->recv[3]=(fof2)%0xff;*/ @@ -765,13 +753,13 @@ } // pnm_t *pnm_connect(const char *mrl) { -pnm_t *pnm_connect(int* fd,const char *path) { +pnm_t *pnm_connect(Tcp& tcp,const char *path) { pnm_t *p=new pnm_t; int need_response=0; p->path=mp_strdup(path); - p->s=*fd; + p->tcp=&tcp; pnm_send_request(p,pnm_available_bandwidths[10]); if (!pnm_get_headers(p, &need_response)) { @@ -836,8 +824,9 @@ void pnm_close(pnm_t *p) { - if (p->s >= 0) closesocket(p->s); + if (p->tcp->established()) p->tcp->close(); delete p->path; + delete p->tcp; delete p; } Modified: mplayerxp/libmpstream/pnm.h =================================================================== --- mplayerxp/libmpstream/pnm.h 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/pnm.h 2012-12-07 14:29:41 UTC (rev 516) @@ -31,9 +31,11 @@ /*#include "xine_internal.h" */ typedef struct pnm_s pnm_t; -typedef int net_fd_t; +namespace mpxp { + class Tcp; +} -pnm_t* pnm_connect (net_fd_t* fd,const char *url); +pnm_t* pnm_connect (Tcp&,const char *url); int pnm_read (pnm_t *self, char *data, int len); void pnm_close (pnm_t *self); Modified: mplayerxp/libmpstream/rtp.cpp =================================================================== --- mplayerxp/libmpstream/rtp.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/rtp.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -31,6 +31,7 @@ /* MPEG-2 TS RTP stack */ #define DEBUG 1 +#include "tcp.h" #include "rtp.h" #include "stream_msg.h" @@ -67,7 +68,7 @@ }; static struct rtpbuffer rtpbuf; -static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData); +static int getrtp2(Tcp& fd, struct rtpheader *rh, char** data, int* lengthData); // RTP Reordering functions // Algorithm works as follows: @@ -90,7 +91,7 @@ } // Write in a cache the rtp packet in right rtp sequence order -static int rtp_cache(int fd, char *buffer, int length) +static int rtp_cache(Tcp& tcp, char *buffer, int length) { struct rtpheader rh; int newseq; @@ -98,7 +99,7 @@ unsigned short seq; static int is_first = 1; - getrtp2(fd, &rh, &data, &length); + getrtp2(tcp, &rh, &data, &length); if(!length) return 0; seq = rh.b.sequence; @@ -159,7 +160,7 @@ // Get next packet in cache // Look in cache to get first packet in sequence -static int rtp_get_next(int fd, char *buffer, int length) +static int rtp_get_next(Tcp& tcp, char *buffer, int length) { int i; unsigned short nextseq; @@ -168,7 +169,7 @@ for (i=0; i < MAXRTPPACKETSIN -3; i++) { if (rtpbuf.len[rtpbuf.first] != 0) break; - length = rtp_cache(fd, buffer, length) ; + length = rtp_cache(tcp, buffer, length) ; // returns on first packet in sequence if (length > 0) { @@ -202,7 +203,7 @@ // Read next rtp packet using cache -int read_rtp_from_server(net_fd_t fd, char *buffer, int length) { +int read_rtp_from_server(Tcp& tcp, char *buffer, int length) { // Following test is ASSERT (i.e. uneuseful if code is correct) if(buffer==NULL || length<STREAM_BUFFER_SIZE) { MSG_ERR("RTP buffer invalid; no data return from network\n"); @@ -210,20 +211,20 @@ } // loop just to skip empty packets - while ((length = rtp_get_next(fd, buffer, length)) == 0) { + while ((length = rtp_get_next(tcp, buffer, length)) == 0) { MSG_ERR("Got empty packet from RTP cache!?\n"); } return(length); } -static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData) { +static int getrtp2(Tcp& tcp, struct rtpheader *rh, char** data, int* lengthData) { static char buf[1600]; unsigned int intP; char* charP = (char*) &intP; int headerSize; int lengthPacket; - lengthPacket=recv(fd,buf,1590,0); + lengthPacket=tcp.read((uint8_t*)(buf),1590); if (lengthPacket<0) MSG_ERR("rtp: socket read error\n"); else if (lengthPacket<12) Modified: mplayerxp/libmpstream/rtp.h =================================================================== --- mplayerxp/libmpstream/rtp.h 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/rtp.h 2012-12-07 14:29:41 UTC (rev 516) @@ -9,6 +9,6 @@ #define RTP_H #include "network.h" -int read_rtp_from_server(net_fd_t fd, char *buffer, int length); +int read_rtp_from_server(Tcp& fd, char *buffer, int length); #endif Modified: mplayerxp/libmpstream/s_ftp.cpp =================================================================== --- mplayerxp/libmpstream/s_ftp.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/s_ftp.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -40,7 +40,6 @@ virtual off_t size() const; virtual off_t sector_size() const; private: - static int fd_can_read(int fd,int timeout); int readline(char *buf,int max); int readresp(char* rsp); int OpenPort(); @@ -56,17 +55,16 @@ libinput_t* libinput; char* cput,*cget; - net_fd_t handle; + Tcp tcp; int cavail,cleft; char* buf; off_t spos; off_t file_len; }; -Ftp_Stream_Interface::Ftp_Stream_Interface() {} +Ftp_Stream_Interface::Ftp_Stream_Interface():tcp(-1) {} Ftp_Stream_Interface::~Ftp_Stream_Interface() { SendCmd("QUIT",NULL); - if(handle) ::closesocket(handle); if(buf) delete buf; } @@ -76,20 +74,6 @@ #define TELNET_IP 244 /* interrupt process--permanently */ #define TELNET_SYNCH 242 /* for telfunc calls */ -// Check if there is something to read on a fd. This avoid hanging -// forever if the network stop responding. -int Ftp_Stream_Interface::fd_can_read(int fd,int timeout) { - fd_set fds; - struct timeval tv; - - FD_ZERO(&fds); - FD_SET(fd,&fds); - tv.tv_sec = timeout; - tv.tv_usec = 0; - - return (::select(fd+1, &fds, NULL, NULL, &tv) > 0); -} - /* * read a line of text * @@ -135,12 +119,12 @@ if (retval == 0) retval = -1; break; } - if(!fd_can_read(handle, 15)) { + if(!tcp.has_data(15)) { MSG_ERR("[ftp] read timed out\n"); retval = -1; break; } - if ((x = recv(handle,cput,cleft,0)) == -1) { + if ((x = tcp.read((uint8_t*)cput,cleft)) == -1) { MSG_ERR("[ftp] read error: %s\n",strerror(errno)); retval = -1; break; @@ -195,7 +179,7 @@ if(hascrlf && l == 2) MSG_V("\n"); else MSG_V("[ftp] > %s",cmd); while(l > 0) { - int s = ::send(handle,cmd,l,0); + int s = tcp.write((const uint8_t*)cmd,l); if(s <= 0) { MSG_ERR("[ftp] write error: %s\n",strerror(errno)); return 0; @@ -226,10 +210,10 @@ } sscanf(par+1,"%u,%u,%u,%u,%u,%u",&num[0],&num[1],&num[2],&num[3],&num[4],&num[5]); snprintf(str,127,"%d.%d.%d.%d",num[0],num[1],num[2],num[3]); - fd = tcp_connect2Server(libinput,str,(num[4]<<8)+num[5],0); + tcp.open(libinput,str,(num[4]<<8)+num[5]); if(fd < 0) MSG_ERR("[ftp] failed to create data connection\n"); - return fd; + return 1; } int Ftp_Stream_Interface::OpenData(size_t newpos) { @@ -237,9 +221,9 @@ char str[256],rsp_txt[256]; // Open a new connection - handle = OpenPort(); + OpenPort(); - if(handle < 0) return 0; + if(tcp.established()) return 0; if(newpos > 0) { snprintf(str,255,"REST %"PRId64, (int64_t)newpos); @@ -266,12 +250,12 @@ if(!OpenData(spos)) return -1; - if(!fd_can_read(handle, 15)) { + if(!tcp.has_data(15)) { MSG_ERR("[ftp] read timed out\n"); return -1; } MSG_V("ftp read: %u bytes\n",sp->len); - r = ::recv(handle,sp->buf,sp->len,0); + r = tcp.read((uint8_t*)sp->buf,sp->len); spos+=r; return (r <= 0) ? -1 : r; } @@ -285,25 +269,21 @@ if(spos > file_len) return 0; // Check to see if the server did not already terminate the transfer - if(fd_can_read(handle, 0)) { + if(tcp.has_data(0)) { if(readresp(rsp_txt) != 2) MSG_WARN("[ftp] Warning the server didn't finished the transfer correctly: %s\n",rsp_txt); - ::closesocket(handle); - handle = -1; + tcp.close(); } // Close current download - if(handle >= 0) { + if(tcp.established()) { static const char pre_cmd[]={TELNET_IAC,TELNET_IP,TELNET_IAC,TELNET_SYNCH}; //int fl; - // First close the fd - ::closesocket(handle); - handle = -1; // Send send the telnet sequence needed to make the server react // send only first byte as OOB due to OOB braindamage in many unices - ::send(handle,pre_cmd,1,MSG_OOB); - ::send(handle,pre_cmd+1,sizeof(pre_cmd)-1,0); + tcp.write((uint8_t*)pre_cmd,1,MSG_OOB); + tcp.write((uint8_t*)(pre_cmd+1),sizeof(pre_cmd)-1); // Get the 426 Transfer aborted // Or the 226 Transfer complete @@ -315,6 +295,8 @@ // Send the ABOR command // Ignore the return code as sometimes it fail with "nothing to abort" SendCmd("ABOR",rsp_txt); + // close the fd + tcp.close(); } if(OpenData(newpos)) spos=newpos; return spos; @@ -327,10 +309,7 @@ void Ftp_Stream_Interface::close() { - if(handle > 0) { - ::closesocket(handle); - handle = 0; - } + if(tcp.established()) tcp.close(); } MPXP_Rc Ftp_Stream_Interface::open(libinput_t*_libinput,const char *_filename,unsigned flags) @@ -360,9 +339,9 @@ MSG_V("FTP: Opening ~%s :%s @%s :%i %s\n",user,pass,host,port,filename); // Open the control connection - handle = tcp_connect2Server(libinput,host,port,1); + tcp.open(libinput,host,port); - if(handle < 0) { + if(!tcp.established()) { url_free(url); return MPXP_False; } Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-06 16:46:40 UTC (rev 515) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-07 14:29:41 UTC (rev 516) @@ -17,6 +17,7 @@ #include "stream_msg.h" #include "url.h" +#include "tcp.h" #include "network.h" namespace mpxp { @@ -37,11 +38,11 @@ private: URL_t* url; off_t spos; - net_fd_t fd; + Tcp tcp; networking_t* networking; }; -Network_Stream_Interface::Network_Stream_Interface() {} +Network_Stream_Interface::Network_Stream_Interface():tcp(-1) {} Network_Stream_Interface::~Network_Stream_Interface() { if(url) { url_free(url); @@ -55,7 +56,7 @@ url = url_new(filename); if(url) { networking=new_networking(libinput); - if(networki... [truncated message content] |
From: <nic...@us...> - 2012-12-06 16:46:51
|
Revision: 515 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=515&view=rev Author: nickols_k Date: 2012-12-06 16:46:40 +0000 (Thu, 06 Dec 2012) Log Message: ----------- fixes: now mplayerxp can establish connection with servers... Modified Paths: -------------- mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/stream.cpp Modified: mplayerxp/libmpstream/s_network.cpp =================================================================== --- mplayerxp/libmpstream/s_network.cpp 2012-12-06 16:03:44 UTC (rev 514) +++ mplayerxp/libmpstream/s_network.cpp 2012-12-06 16:46:40 UTC (rev 515) @@ -43,8 +43,10 @@ Network_Stream_Interface::Network_Stream_Interface() {} Network_Stream_Interface::~Network_Stream_Interface() { - url_free(url); - delete url; + if(url) { + url_free(url); + delete url; + } } MPXP_Rc Network_Stream_Interface::open(libinput_t* libinput,const char *filename,unsigned flags) @@ -56,7 +58,9 @@ if(networking_start(&fd,networking,url)<0){ MSG_ERR(MSGTR_UnableOpenURL, filename); url_free(url); + url=NULL; free_networking(networking); + networking=NULL; return MPXP_False; } MSG_INFO(MSGTR_ConnToServer, url->hostname); @@ -66,8 +70,8 @@ return MPXP_False; } stream_type_e Network_Stream_Interface::type() const { return STREAMTYPE_STREAM; } -off_t Network_Stream_Interface::size() const { return STREAM_BUFFER_SIZE; } -off_t Network_Stream_Interface::sector_size() const { return -1; } +off_t Network_Stream_Interface::size() const { return 0; } +off_t Network_Stream_Interface::sector_size() const { return 1; } int Network_Stream_Interface::read(stream_packet_t*sp) { @@ -112,7 +116,7 @@ extern const stream_interface_info_t network_stream = { - "inet:", + "*://", "reads multimedia stream from any known network protocol. Example: inet:http://myserver.com", query_interface }; Modified: mplayerxp/libmpstream/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream/s_rtsp.cpp 2012-12-06 16:03:44 UTC (rev 514) +++ mplayerxp/libmpstream/s_rtsp.cpp 2012-12-06 16:46:40 UTC (rev 515) @@ -162,7 +162,7 @@ return MPXP_Ok; } stream_type_e Rtsp_Stream_Interface::type() const { return STREAMTYPE_STREAM; } -off_t Rtsp_Stream_Interface::size() const { return -1; } +off_t Rtsp_Stream_Interface::size() const { return 0; } off_t Rtsp_Stream_Interface::sector_size() const { return 1; } static Stream_Interface* query_interface() { return new(zeromem) Rtsp_Stream_Interface; } Modified: mplayerxp/libmpstream/s_udp.cpp =================================================================== --- mplayerxp/libmpstream/s_udp.cpp 2012-12-06 16:03:44 UTC (rev 514) +++ mplayerxp/libmpstream/s_udp.cpp 2012-12-06 16:46:40 UTC (rev 515) @@ -112,7 +112,7 @@ return MPXP_Ok; } stream_type_e Udp_Stream_Interface::type() const { return STREAMTYPE_STREAM; } -off_t Udp_Stream_Interface::size() const { return -1; } +off_t Udp_Stream_Interface::size() const { return 0; } off_t Udp_Stream_Interface::sector_size() const { return 1; } static Stream_Interface* query_interface() { return new(zeromem) Udp_Stream_Interface; } Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-06 16:03:44 UTC (rev 514) +++ mplayerxp/libmpstream/stream.cpp 2012-12-06 16:46:40 UTC (rev 515) @@ -109,9 +109,10 @@ done=0; for(i=0;sdrivers[i]!=&null_stream;i++) { mrl_len=strlen(sdrivers[i]->mrl); - if(strncmp(filename,sdrivers[i]->mrl,mrl_len)==0) { + if(strncmp(filename,sdrivers[i]->mrl,mrl_len)==0||sdrivers[i]->mrl[0]=='*') { MSG_V("Opening %s ... ",sdrivers[i]->mrl); Stream_Interface* drv = sdrivers[i]->query_interface(); + if(sdrivers[i]->mrl[0]=='*') mrl_len=0; if(drv->open(libinput,&filename[mrl_len],0)==MPXP_Ok) { MSG_V("OK\n"); *file_format = stream->file_format; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-06 16:03:56
|
Revision: 514 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=514&view=rev Author: nickols_k Date: 2012-12-06 16:03:44 +0000 (Thu, 06 Dec 2012) Log Message: ----------- redesign decoder_driver's interface for better autodetection: now after each success probe for each probing driver are being called preinit and uninit methods Modified Paths: -------------- mplayerxp/libmpcodecs/ad.cpp 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.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 Modified: mplayerxp/libmpcodecs/ad.cpp =================================================================== --- mplayerxp/libmpcodecs/ad.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -87,19 +87,21 @@ return NULL; } -const audio_probe_t* afm_probe_driver(ad_private_t*ctx,sh_audio_t *sh) { +const audio_probe_t* afm_probe_driver(ad_private_t*ctx,sh_audio_t *sh,audio_filter_info_t* afi) { unsigned i; const audio_probe_t* probe; for (i=0; mpcodecs_ad_drivers[i] != &mpcodecs_ad_null; i++) { MSG_V("Probing: %s\n",mpcodecs_ad_drivers[i]->info->driver_name); - if((probe=mpcodecs_ad_drivers[i]->probe(ctx,sh->wtag))!=NULL) { + if((probe=mpcodecs_ad_drivers[i]->probe(sh->wtag))!=NULL) { + ad_private_t* priv=mpcodecs_ad_drivers[i]->preinit(probe,sh,afi); MSG_V("Driver: %s supports these outfmt for 0x%X wtag:\n" - ,mpcodecs_ad_drivers[i]->info->driver_name,sh->wtag); + ,mpcodecs_ad_drivers[i]->info->driver_name,sh->wtag); for(i=0;i<Audio_MaxOutSample;i++) { - MSG_V("%X ",probe->sample_fmt[i]); - if(probe->sample_fmt[i]==-1||probe->sample_fmt[i]==0) break; + MSG_V("%X ",probe->sample_fmt[i]); + if(probe->sample_fmt[i]==-1||probe->sample_fmt[i]==0) break; } MSG_V("\n"); + mpcodecs_ad_drivers[i]->uninit(priv); return probe; } } Modified: mplayerxp/libmpcodecs/ad.h =================================================================== --- mplayerxp/libmpcodecs/ad.h 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad.h 2012-12-06 16:03:44 UTC (rev 514) @@ -51,8 +51,8 @@ { const ad_info_t* info; const config_t* options;/**< Optional: MPlayerXP's option related */ - const audio_probe_t*(* __FASTCALL__ probe)(ad_private_t *,uint32_t wtag); - ad_private_t* (* __FASTCALL__ preinit)(sh_audio_t *,audio_filter_info_t*); + const audio_probe_t*(* __FASTCALL__ probe)(uint32_t wtag); + ad_private_t* (* __FASTCALL__ preinit)(const audio_probe_t*,sh_audio_t *,audio_filter_info_t*); MPXP_Rc (* __FASTCALL__ init)(ad_private_t *ctx); void (* __FASTCALL__ uninit)(ad_private_t *ctx); MPXP_Rc (*control_ad)(ad_private_t *ctx,int cmd,any_t* arg, ...); @@ -60,7 +60,7 @@ } ad_functions_t; extern const ad_functions_t* afm_find_driver(const char *name); -extern const audio_probe_t* afm_probe_driver(ad_private_t*ctx,sh_audio_t* sh); +extern const audio_probe_t* afm_probe_driver(ad_private_t*ctx,sh_audio_t*sh,audio_filter_info_t* afi); #define FIX_APTS(sh_audio,pts,in_size) (sh_audio->i_bps?((float)(pts)+(float)(in_size)/(float)sh_audio->i_bps):((float)(pts))) #endif Modified: mplayerxp/libmpcodecs/ad_a52.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_a52.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_a52.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -56,9 +56,8 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; - UNUSED(ctx); for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) return &probes[i]; @@ -128,8 +127,9 @@ return (flags&A52_LFE) ? (channels+1) : channels; } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); ad_private_t* ctx=new(zeromem) ad_private_t; /* Dolby AC3 audio: */ /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ Modified: mplayerxp/libmpcodecs/ad_acm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_acm.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_acm.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -33,7 +33,7 @@ sh_audio_t* sh; }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* p,uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } static int init_acm_audio_codec(ad_private_t *priv){ sh_audio_t* sh_audio = priv->sh; @@ -141,8 +141,9 @@ return MPXP_Ok; } -ad_private_t* preinit(sh_audio_t *sh_audio,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh_audio,audio_filter_info_t* afi) { + UNUSED(probe); UNUSED(afi); /* Win32 ACM audio codec: */ ad_private_t *priv; Modified: mplayerxp/libmpcodecs/ad_dca.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dca.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_dca.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -58,8 +58,7 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { - UNUSED(ctx); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -126,8 +125,9 @@ return (flags&DCA_LFE) ? (channels+1) : channels; } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); /* DTS audio: however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ #ifdef WORDS_BIGENDIAN Modified: mplayerxp/libmpcodecs/ad_dmo.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_dmo.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -34,7 +34,7 @@ sh_audio_t* sh; }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* p,uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } static MPXP_Rc init(ad_private_t *p) { @@ -42,8 +42,9 @@ return MPXP_Ok; } -static ad_private_t* preinit(sh_audio_t *sh_audio,audio_filter_info_t* afi) +static ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh_audio,audio_filter_info_t* afi) { + UNUSED(probe); UNUSED(afi); ad_private_t*priv; int chans=(mp_conf.ao_channels==sh_audio->wf->nChannels) ? Modified: mplayerxp/libmpcodecs/ad_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_dshow.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -29,7 +29,7 @@ sh_audio_t* sh; }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* p,uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } MPXP_Rc init(ad_private_t *p) { @@ -37,8 +37,9 @@ return MPXP_Ok; } -ad_private_t* preinit(sh_audio_t *sh_audio,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh_audio,audio_filter_info_t* afi) { + UNUSED(probe); UNUSED(afi); ad_private_t *priv; if(!(priv=new(zeromem) ad_private_t)) return NULL; Modified: mplayerxp/libmpcodecs/ad_dvdpcm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_dvdpcm.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_dvdpcm.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -30,8 +30,7 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { - UNUSED(ctx); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -78,8 +77,9 @@ return MPXP_Ok; } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); UNUSED(afi); sh->audio_out_minsize=2048; ad_private_t* priv = new(zeromem) ad_private_t; Modified: mplayerxp/libmpcodecs/ad_faad.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_faad.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_faad.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -42,24 +42,23 @@ }; static const audio_probe_t probes[] = { - { "faad", "libfaad", 0xFF, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", 0x4143, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", 0x706D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", 0xA106, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", 0xAAC0, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('A','A','C',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('A','A','C','P'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('M','P','4','A'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('M','P','4','L'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('M','P','4','A'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('R','A','A','C'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('R','A','A','P'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, - { "faad", "libfaad", FOURCC_TAG('V','L','B',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, 0xFF, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, 0x4143, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, 0x706D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, 0xA106, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, 0xAAC0, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('A','A','C',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('A','A','C','P'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('M','P','4','A'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('M','P','4','L'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('M','P','4','A'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('R','A','A','C'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('R','A','A','P'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, + { "faad", "libfaad"SLIBSUFFIX, FOURCC_TAG('V','L','B',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S24_LE, AFMT_S16_LE} }, { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { - UNUSED(ctx); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -180,14 +179,14 @@ } -static ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +static ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { sh->audio_out_minsize=8192*FAAD_MAX_CHANNELS; sh->audio_in_minsize=FAAD_BUFFLEN; ad_private_t* priv = new(zeromem) ad_private_t; priv->sh = sh; priv->afi = afi; - if(load_dll("libfaad"SLIBSUFFIX)!=MPXP_Ok) { + if(load_dll(probe->codec_dll)!=MPXP_Ok) { delete priv; return NULL; } Modified: mplayerxp/libmpcodecs/ad_hwac3.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_hwac3.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_hwac3.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -171,9 +171,8 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; - UNUSED(ctx); for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) return &probes[i]; @@ -181,10 +180,11 @@ } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); /* Dolby AC3 audio: */ - ad_private_t* ctx=mpcodecs_ad_a52.preinit(sh,afi); + ad_private_t* ctx=mpcodecs_ad_a52.preinit(probe,sh,afi); sh->audio_out_minsize=4*256*6; sh->audio_in_minsize=3840; sh->nch=2; Modified: mplayerxp/libmpcodecs/ad_internal.h =================================================================== --- mplayerxp/libmpcodecs/ad_internal.h 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_internal.h 2012-12-06 16:03:44 UTC (rev 514) @@ -11,9 +11,9 @@ #include "ad_msg.h" -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag); static MPXP_Rc __FASTCALL__ init(ad_private_t *ctx); -static ad_private_t* __FASTCALL__ preinit(sh_audio_t *ctx,audio_filter_info_t* afi); +static ad_private_t* __FASTCALL__ preinit(const audio_probe_t* probe,sh_audio_t *ctx,audio_filter_info_t* afi); static void __FASTCALL__ uninit(ad_private_t *ctx); static MPXP_Rc control_ad(ad_private_t *ctx,int cmd,any_t* arg, ...); static unsigned __FASTCALL__ decode(ad_private_t *ctx,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts); Modified: mplayerxp/libmpcodecs/ad_lavc.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_lavc.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_lavc.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -24,7 +24,7 @@ audio_filter_info_t* afi; }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* priv,uint32_t wtag) { +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; audio_probe_t* acodec = NULL; const char *what="AVCodecID"; @@ -36,10 +36,8 @@ ,wtag); return NULL; } - if(!priv){ -// avcodec_init(); - avcodec_register_all(); - } +// avcodec_init(); + avcodec_register_all(); AVCodec *codec=avcodec_find_decoder(id); if(!codec) { what="AVCodec"; goto prn_err; } @@ -57,7 +55,7 @@ struct codecs_st* __FASTCALL__ find_lavc_audio(ad_private_t* priv) { sh_audio_t* sh = priv->sh; - const audio_probe_t* aprobe=probe(priv,sh->wtag); + const audio_probe_t* aprobe=probe(sh->wtag); struct codecs_st* acodec = NULL; if(aprobe) { acodec=new(zeromem) struct codecs_st; @@ -86,8 +84,9 @@ LIBAD_EXTERN(lavc) -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); ad_private_t* priv = new(zeromem) ad_private_t; sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; priv->sh = sh; @@ -102,10 +101,9 @@ AVCodec *lavc_codec=NULL; sh_audio_t* sh_audio = priv->sh; MSG_V("LAVC audio codec\n"); - if(!priv){ -// avcodec_init(); - avcodec_register_all(); - } +// 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); Modified: mplayerxp/libmpcodecs/ad_libdv.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_libdv.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_libdv.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -44,8 +44,7 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* priv,uint32_t wtag) { - UNUSED(priv); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -56,8 +55,9 @@ // defined in vd_libdv.c: dv_decoder_t* init_global_rawdv_decoder(void); -static ad_private_t* preinit(sh_audio_t *sh_audio,audio_filter_info_t* afi) +static ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh_audio,audio_filter_info_t* afi) { + UNUSED(probe); UNUSED(afi); sh_audio->audio_out_minsize=4*DV_AUDIO_MAX_SAMPLES*2; ad_private_t* priv = new(zeromem) ad_private_t; Modified: mplayerxp/libmpcodecs/ad_mp3.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_mp3.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_mp3.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -246,19 +246,18 @@ }; 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} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, 0x50, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, 0x55, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, 0x55005354, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, 0x5000736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, 0x5500736D, ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, FOURCC_TAG('.','M','P','3'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, FOURCC_TAG('L','A','M','E'), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, + { "mp3lib", "libmpg123"SLIBSUFFIX, FOURCC_TAG('M','P','3',' '), ACodecStatus_Working, {AFMT_FLOAT32, AFMT_S16_LE} }, { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* priv,uint32_t wtag) { - UNUSED(priv); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -266,11 +265,11 @@ return NULL; } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { UNUSED(afi); sh->audio_out_minsize=9216; - if(load_dll("libmpg123"SLIBSUFFIX)!=MPXP_Ok) return NULL; + if(load_dll(probe->codec_dll)!=MPXP_Ok) return NULL; ad_private_t* priv = new(zeromem) ad_private_t; priv->sh = sh; return priv; Modified: mplayerxp/libmpcodecs/ad_null.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_null.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_null.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -23,7 +23,7 @@ LIBAD_EXTERN(null) -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { UNUSED(wtag); return NULL; } MPXP_Rc init(ad_private_t *priv) { @@ -31,8 +31,9 @@ return MPXP_Ok; } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); UNUSED(afi); ad_private_t* priv = new(zeromem) ad_private_t; priv->sh = sh; Modified: mplayerxp/libmpcodecs/ad_pcm.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_pcm.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_pcm.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -45,8 +45,7 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* ctx,uint32_t wtag) { - UNUSED(ctx); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -88,8 +87,9 @@ return MPXP_Ok; } -ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); sh->audio_out_minsize=16384; ad_private_t* priv = new(zeromem) ad_private_t; priv->sh = sh; Modified: mplayerxp/libmpcodecs/ad_qtaudio.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_qtaudio.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_qtaudio.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -160,9 +160,10 @@ sh_audio_t* sh; }; -static const audio_probe_t* __FASTCALL__ probe(sh_audio_t* sh,uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } -static ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi){ +static ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi){ + UNUSED(probe); UNUSED(afi); int error; unsigned long FramesToGet=0; //how many frames the demuxer has to get Modified: mplayerxp/libmpcodecs/ad_real.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_real.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_real.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -83,8 +83,7 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* p,uint32_t wtag) { - UNUSED(p); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -92,22 +91,9 @@ return NULL; } -static ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi){ - UNUSED(afi); - // let's check if the driver is available, return 0 if not. - // (you should do that if you use external lib(s) which is optional) - unsigned int result; - int len=0; - any_t* prop; - char path[4096]; - char cpath[4096]; - ad_private_t *priv; - priv=new(zeromem) ad_private_t; - priv->sh = sh; - if(!(handle = dlopen (sh->codec->dll_name, RTLD_LAZY))) { - delete priv; - return NULL; - } +static MPXP_Rc load_dll(const char* name) +{ + if(!(handle = dlopen (name, RTLD_LAZY))) return MPXP_False; raCloseCodec = (uint32_t (*)(uint32_t))ld_sym(handle, "RACloseCodec"); raDecode = (uint32_t (*)(any_t*,any_t*,uint32_t,any_t*,any_t*,uint32_t))ld_sym(handle, "RADecode"); @@ -120,13 +106,25 @@ raSetDLLAccessPath = (void (*)(uint32_t))ld_sym(handle, "SetDLLAccessPath"); raSetPwd = (void (*)(char*,char*))ld_sym(handle, "RASetPwd"); /* optional, used by SIPR */ - if(!raCloseCodec || !raDecode || !raFreeDecoder || - !raGetFlavorProperty || !(raOpenCodec2||raOpenCodec) || !raSetFlavor || - !raInitDecoder){ - delete priv; - return NULL; - } + return (raCloseCodec && raDecode && raFreeDecoder && + raGetFlavorProperty && (raOpenCodec2||raOpenCodec) && raSetFlavor && + raInitDecoder)?MPXP_Ok:MPXP_False; +} +static ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi){ + UNUSED(afi); + // let's check if the driver is available, return 0 if not. + // (you should do that if you use external lib(s) which is optional) + unsigned int result; + int len=0; + any_t* prop; + char path[4096]; + char cpath[4096]; + ad_private_t *priv; + if(load_dll(probe->codec_dll)!=MPXP_Ok) return NULL; + priv=new(zeromem) ad_private_t; + priv->sh = sh; + char *end; strcpy(cpath,sh->codec->dll_name); end = strrchr(cpath,'/'); Modified: mplayerxp/libmpcodecs/ad_twin.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_twin.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_twin.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -218,7 +218,7 @@ sh_audio_t* sh; }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* p,uint32_t wtag) { return NULL; } +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { return NULL; } static HINSTANCE vqf_dll; @@ -312,14 +312,14 @@ return MPXP_Ok; } -ad_private_t* preinit(sh_audio_t *sh_audio,audio_filter_info_t* afi) +ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh_audio,audio_filter_info_t* afi) { UNUSED(afi); /* Win32 VQF audio codec: */ ad_private_t *priv; if(!(priv=new(zeromem) ad_private_t)) return NULL; priv->sh = sh_audio; - if(!load_dll((const char *)sh_audio->codec->dll_name)) { + if(!load_dll(probe->codec_dll)) { MSG_ERR("win32.dll looks broken :(\n"); delete priv; return NULL; Modified: mplayerxp/libmpcodecs/ad_vorbis.cpp =================================================================== --- mplayerxp/libmpcodecs/ad_vorbis.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/ad_vorbis.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -46,8 +46,7 @@ { NULL, NULL, 0x0, ACodecStatus_NotWorking, {AFMT_S8}} }; -static const audio_probe_t* __FASTCALL__ probe(ad_private_t* priv,uint32_t wtag) { - UNUSED(priv); +static const audio_probe_t* __FASTCALL__ probe(uint32_t wtag) { unsigned i; for(i=0;probes[i].driver;i++) if(wtag==probes[i].wtag) @@ -55,8 +54,9 @@ return NULL; } -static ad_private_t* preinit(sh_audio_t *sh,audio_filter_info_t* afi) +static ad_private_t* preinit(const audio_probe_t* probe,sh_audio_t *sh,audio_filter_info_t* afi) { + UNUSED(probe); sh->audio_out_minsize=1024*4; // 1024 samples/frame ad_private_t* priv = new(zeromem) ad_private_t; priv->sh = sh; Modified: mplayerxp/libmpcodecs/dec_audio.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_audio.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/dec_audio.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -60,9 +60,9 @@ if(afm) { priv->mpadec=afm_find_driver(afm); - if(priv->mpadec) aprobe=priv->mpadec->probe(priv->ctx,sh_audio->wtag); + if(priv->mpadec) aprobe=priv->mpadec->probe(sh_audio->wtag); } - else aprobe = afm_probe_driver(priv->ctx,sh_audio); + else aprobe = afm_probe_driver(priv->ctx,sh_audio,priv->afi); if(aprobe) { afm=aprobe->driver; @@ -82,7 +82,7 @@ delete priv; return NULL; // no such driver } - if((priv->ctx=priv->mpadec->preinit(sh_audio,priv->afi))==NULL) { + if((priv->ctx=priv->mpadec->preinit(aprobe,sh_audio,priv->afi))==NULL) { MSG_ERR(MSGTR_CODEC_CANT_PREINITA); delete priv; return NULL; Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -145,18 +145,22 @@ priv->parent=sh_video; priv->libinput=libinput; handle->vd_private=priv; + const video_probe_t* vprobe=NULL; /* Use lavc's drivers as last hope */ priv->mpvdec=vfm_find_driver("lavc"); if(priv->mpvdec) { - if((priv->ctx=priv->mpvdec->preinit(sh_video,priv->psi))==NULL){ - MSG_ERR(MSGTR_CODEC_CANT_INITV); - return NULL; - } - if(priv->mpvdec->init(priv->ctx,handle)!=MPXP_Ok){ - MSG_ERR(MSGTR_CODEC_CANT_INITV); - return NULL; - } + if((vprobe=priv->mpvdec->probe(sh_video->fourcc))!=NULL) { + if((priv->ctx=priv->mpvdec->preinit(vprobe,sh_video,priv->psi))==NULL){ + MSG_ERR(MSGTR_CODEC_CANT_INITV); + return NULL; + } + if(priv->mpvdec->init(priv->ctx,handle)!=MPXP_Ok){ + MSG_ERR(MSGTR_CODEC_CANT_INITV); + return NULL; + } + } else goto err_out; } else { + err_out: MSG_ERR("Cannot find lavc video decoder\n"); return NULL; } @@ -188,9 +192,9 @@ if(vfm) { priv->mpvdec=vfm_find_driver(vfm); - if(priv->mpvdec) vprobe=priv->mpvdec->probe(priv->ctx,sh_video->fourcc); + if(priv->mpvdec) vprobe=priv->mpvdec->probe(sh_video->fourcc); } - else vprobe = vfm_driver_probe(priv->ctx,sh_video); + else vprobe = vfm_driver_probe(priv->ctx,sh_video,priv->psi); if(vprobe) { vfm=vprobe->driver; @@ -204,7 +208,7 @@ priv->mpvdec=vfm_find_driver(vfm); if(priv->mpvdec) { - if((priv->ctx=priv->mpvdec->preinit(sh_video,priv->psi))==NULL){ + if((priv->ctx=priv->mpvdec->preinit(vprobe,sh_video,priv->psi))==NULL){ MSG_ERR(MSGTR_CODEC_CANT_INITV); delete sh_video->codec; sh_video->codec=NULL; Modified: mplayerxp/libmpcodecs/vd.cpp =================================================================== --- mplayerxp/libmpcodecs/vd.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -87,28 +87,33 @@ const vd_functions_t* vfm_find_driver(const char *name) { unsigned i; for (i=0; mpcodecs_vd_drivers[i] != &mpcodecs_vd_null; i++) - if(strcmp(mpcodecs_vd_drivers[i]->info->driver_name,name)==0) + if(strcmp(mpcodecs_vd_drivers[i]->info->driver_name,name)==0) { return mpcodecs_vd_drivers[i]; + } return NULL; } -const video_probe_t* vfm_driver_probe(vd_private_t* ctx,sh_video_t *sh) { +const video_probe_t* vfm_driver_probe(vd_private_t* ctx,sh_video_t *sh,put_slice_info_t* psi) { unsigned i; const video_probe_t* probe; for (i=0; mpcodecs_vd_drivers[i] != &mpcodecs_vd_null; i++) { MSG_V("Probing: %s\n",mpcodecs_vd_drivers[i]->info->driver_name); - if((probe=mpcodecs_vd_drivers[i]->probe(ctx,sh->fourcc))!=NULL) { - const char* pfcc = reinterpret_cast<const char*>(&sh->fourcc); - MSG_V("Driver: %s supports these outfmt for %c%c%c%c fourcc:\n" - ,mpcodecs_vd_drivers[i]->info->driver_name - ,pfcc[0],pfcc[1],pfcc[2],pfcc[3],probe->flags[i]); - for(i=0;i<Video_MaxOutFmt;i++) { - pfcc = reinterpret_cast<const char*>(&probe->pix_fmt[i]); - MSG_V("%c%c%c%c (flg=%X) ",pfcc[0],pfcc[1],pfcc[2],pfcc[3],probe->flags[i]); - if(probe->pix_fmt[i]==0||probe->pix_fmt[i]==-1) break; + if((probe=mpcodecs_vd_drivers[i]->probe(sh->fourcc))!=NULL) { + vd_private_t* priv=mpcodecs_vd_drivers[i]->preinit(probe,sh,psi); + if(priv) { + const char* pfcc = reinterpret_cast<const char*>(&sh->fourcc); + MSG_V("Driver: %s supports these outfmt for %c%c%c%c fourcc:\n" + ,mpcodecs_vd_drivers[i]->info->driver_name + ,pfcc[0],pfcc[1],pfcc[2],pfcc[3],probe->flags[i]); + for(i=0;i<Video_MaxOutFmt;i++) { + pfcc = reinterpret_cast<const char*>(&probe->pix_fmt[i]); + MSG_V("%c%c%c%c (flg=%X) ",pfcc[0],pfcc[1],pfcc[2],pfcc[3],probe->flags[i]); + if(probe->pix_fmt[i]==0||probe->pix_fmt[i]==-1) break; + } + MSG_V("\n"); + mpcodecs_vd_drivers[i]->uninit(priv); + return probe; } - MSG_V("\n"); - return probe; } } return NULL; Modified: mplayerxp/libmpcodecs/vd.h =================================================================== --- mplayerxp/libmpcodecs/vd.h 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd.h 2012-12-06 16:03:44 UTC (rev 514) @@ -57,8 +57,8 @@ { const vd_info_t* info; const config_t* options;/**< Optional: MPlayerXP's option related */ - const video_probe_t*(*__FASTCALL__ probe)(vd_private_t *ctx,uint32_t fourcc); - vd_private_t* (*__FASTCALL__ preinit)(sh_video_t *sh,put_slice_info_t* psi); + const video_probe_t*(*__FASTCALL__ probe)(uint32_t fourcc); + vd_private_t* (*__FASTCALL__ preinit)(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi); MPXP_Rc (*__FASTCALL__ init)(vd_private_t *ctx,video_decoder_t*opaque); void (*__FASTCALL__ uninit)(vd_private_t *ctx); MPXP_Rc (*control_vd)(vd_private_t *ctx,int cmd,any_t* arg, ...); @@ -66,7 +66,7 @@ } vd_functions_t; extern const vd_functions_t* vfm_find_driver(const char *name); -extern const video_probe_t* vfm_driver_probe(vd_private_t*ctx,sh_video_t *sh); +extern const video_probe_t* vfm_driver_probe(vd_private_t*ctx,sh_video_t *sh,put_slice_info_t* psi); enum { VDCTRL_QUERY_FORMAT =3, /* test for availabilty of a format */ Modified: mplayerxp/libmpcodecs/vd_divx4.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_divx4.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_divx4.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -141,18 +141,17 @@ static any_t*dll_handle; static const video_probe_t probes[] = { - { "divx", "libdivx.so",FOURCC_TAG('D','Y','U','V'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, - { "divx", "libdivx.so",FOURCC_TAG('D','I','V','3'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, - { "divx", "libdivx.so",FOURCC_TAG('D','I','V','4'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, - { "divx", "libdivx.so",FOURCC_TAG('D','I','V','5'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, - { "divx", "libdivx.so",FOURCC_TAG('D','I','V','6'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, - { "divx", "libdivx.so",FOURCC_TAG('D','I','V','X'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, - { "divx", "libdivx.so",FOURCC_TAG('D','X','5','0'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','Y','U','V'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','I','V','3'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','I','V','4'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','I','V','5'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','I','V','6'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','I','V','X'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, + { "divx", "libdivx"SLIBSUFFIX,FOURCC_TAG('D','X','5','0'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420}, {VideoFlag_None, VideoFlag_None } }, { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { VideoFlag_None }} }; -static const video_probe_t* __FASTCALL__ probe(vd_private_t *p,uint32_t fourcc) { - UNUSED(p); +static const video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { unsigned i; for(i=0;probes[i].driver;i++) if(fourcc==probes[i].fourcc) @@ -211,8 +210,9 @@ return getDecore_ptr != NULL; } -static vd_private_t* preinit(sh_video_t *sh,put_slice_info_t* psi){ +static vd_private_t* preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi){ UNUSED(psi); + if(!load_lib(probe->codec_dll)) return NULL; vd_private_t* priv = new(zeromem) vd_private_t; priv->sh=sh; return priv; @@ -224,7 +224,6 @@ sh_video_t* sh = priv->sh; int bits=12; priv->parent = opaque; - if(!load_lib("libdivx"SLIBSUFFIX)) 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: Modified: mplayerxp/libmpcodecs/vd_dmo.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dmo.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_dmo.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -33,7 +33,7 @@ video_decoder_t* parent; }; -static const video_probe_t* __FASTCALL__ probe(vd_private_t *p,uint32_t fourcc) { return NULL; } +static const video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters static MPXP_Rc control_vd(vd_private_t *p,int cmd,any_t* arg,...){ @@ -53,7 +53,8 @@ return MPXP_Unknown; } -static vd_private_t* preinit(sh_video_t *sh,put_slice_info_t* psi){ +static vd_private_t* preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi){ + UNUSED(probe); UNUSED(psi); vd_private_t* priv = new(zeromem) vd_private_t; priv->sh=sh; Modified: mplayerxp/libmpcodecs/vd_dshow.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_dshow.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_dshow.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -35,7 +35,7 @@ video_decoder_t* parent; }; -static const video_probe_t* __FASTCALL__ probe(vd_private_t *p,uint32_t fourcc) { return NULL; } +static const video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { return NULL; } // to set/get/query special features/parameters static MPXP_Rc control_vd(vd_private_t *p,int cmd,any_t* arg,...){ @@ -70,7 +70,8 @@ return MPXP_Unknown; } -static vd_private_t* preinit(sh_video_t *sh,put_slice_info_t* psi){ +static vd_private_t* preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi){ + UNUSED(probe); UNUSED(psi); vd_private_t* priv = new(zeromem) vd_private_t; priv->sh=sh; Modified: mplayerxp/libmpcodecs/vd_huffyuv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_huffyuv.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -100,8 +100,7 @@ { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { VideoFlag_None }} }; -static const video_probe_t* __FASTCALL__ probe(vd_private_t *priv,uint32_t fourcc) { - UNUSED(priv); +static const video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { unsigned i; for(i=0;probes[i].driver;i++) if(fourcc==probes[i].fourcc) @@ -196,7 +195,8 @@ return MPXP_Unknown; } -static vd_private_t* preinit(sh_video_t *sh,put_slice_info_t* psi){ +static vd_private_t* preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi){ + UNUSED(probe); UNUSED(psi); vd_private_t* priv = new(zeromem) vd_private_t; priv->sh=sh; Modified: mplayerxp/libmpcodecs/vd_internal.h =================================================================== --- mplayerxp/libmpcodecs/vd_internal.h 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_internal.h 2012-12-06 16:03:44 UTC (rev 514) @@ -12,9 +12,9 @@ //static vd_info_t info; //static const config_t options[]; -static const video_probe_t* __FASTCALL__ probe(vd_private_t *ctx,uint32_t fourcc); +static const video_probe_t* __FASTCALL__ probe(uint32_t fourcc); static MPXP_Rc control_vd(vd_private_t *ctx,int cmd,any_t* arg,...); -static vd_private_t* __FASTCALL__ preinit(sh_video_t *sh,put_slice_info_t* psi); +static vd_private_t* __FASTCALL__ preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi); static MPXP_Rc __FASTCALL__ init(vd_private_t *ctx,video_decoder_t*opaque); static void __FASTCALL__ uninit(vd_private_t *ctx); static mp_image_t* __FASTCALL__ decode(vd_private_t *ctx,const enc_frame_t* frame); Modified: mplayerxp/libmpcodecs/vd_lavc.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_lavc.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_lavc.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -193,8 +193,7 @@ return MPXP_Unknown; } -static const video_probe_t* __FASTCALL__ probe(vd_private_t *ctx,uint32_t fcc) { - UNUSED(ctx); +static const video_probe_t* __FASTCALL__ probe(uint32_t fcc) { unsigned i; unsigned char flag = CODECS_FLAG_NOFLIP; video_probe_t* vprobe = NULL; @@ -232,7 +231,7 @@ static MPXP_Rc find_vdecoder(vd_private_t* ctx) { sh_video_t* sh = ctx->sh; - const video_probe_t* vprobe=probe(ctx,sh->fourcc); + const video_probe_t* vprobe=probe(sh->fourcc); ctx->probe = vprobe; if(vprobe) { sh->codec=new(zeromem) struct codecs_st; @@ -245,7 +244,8 @@ return MPXP_False; } -static vd_private_t* preinit(sh_video_t *sh,put_slice_info_t* psi){ +static vd_private_t* preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi){ + UNUSED(probe); vd_private_t* priv = new(zeromem) vd_private_t; priv->sh=sh; priv->psi=psi; @@ -438,12 +438,14 @@ // uninit driver static void uninit(vd_private_t *priv){ - 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->ctx) { + 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); Modified: mplayerxp/libmpcodecs/vd_libdv.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libdv.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_libdv.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -58,8 +58,7 @@ { NULL, NULL, 0x0, VCodecStatus_NotWorking, {0x0}, { VideoFlag_None }} }; -static const video_probe_t* __FASTCALL__ probe(vd_private_t *priv,uint32_t fourcc) { - UNUSED(priv); +static const video_probe_t* __FASTCALL__ probe(uint32_t fourcc) { unsigned i; for(i=0;probes[i].driver;i++) if(fourcc==probes[i].fourcc) @@ -87,7 +86,8 @@ return global_rawdv_decoder; } -static vd_private_t* preinit(sh_video_t *sh,put_slice_info_t* psi){ +static vd_private_t* preinit(const video_probe_t* probe,sh_video_t *sh,put_slice_info_t* psi){ + UNUSED(probe); UNUSED(psi); vd_private_t* priv = new(zeromem) vd_private_t; priv->sh=sh; Modified: mplayerxp/libmpcodecs/vd_libmpeg2.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-12-06 13:53:54 UTC (rev 513) +++ mplayerxp/libmpcodecs/vd_libmpeg2.cpp 2012-12-06 16:03:44 UTC (rev 514) @@ -35,74 +35,73 @@ LIBVD_EXTERN(libmpeg2) static const video_probe_t probes[] = { - { "mpeg2", "libmpeg2", 0x10000001, VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", 0x10000002, VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('A','V','M','P'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('D','V','R',' '), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('L','M','P','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','1','V',' '), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','1','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','2','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','7','0','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','M','E','S'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','2','V'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','V'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','E','G'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','P','G','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','5','P'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('P','I','M','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('P','I','M','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','3'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','4'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','5'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','6'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','7'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','8'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','9'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('H','D','V','A'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','3','N'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','3','P'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','4','N'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','4','P'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('M','X','5','N'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','3'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','4'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','5'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','6'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','7'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','8'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','9'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','A'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','B'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','C'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','D'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','E'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','5','F'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','3'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','4'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','5'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','6'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','7'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','8'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','9'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','A'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','B'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','C'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','D'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','E'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, - { "mpeg2", "libmpeg2", FOURCC_TAG('X','D','V','F'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, 0x10000001, VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, 0x10000002, VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('A','V','M','P'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('D','V','R',' '), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('L','M','P','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','1','V',' '), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','1','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','2','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','7','0','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','M','E','S'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','P','2','V'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','P','G','V'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','P','E','G'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','P','G','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','P','G','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','X','5','P'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('P','I','M','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('P','I','M','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','1'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','2'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','3'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','4'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','5'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','6'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','7'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','8'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','9'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('H','D','V','A'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, IMGFMT_422P}, {VideoFlag_None, VideoFlag_None } }, + { "mpeg2", "libmpeg2"SLIBSUFFIX, FOURCC_TAG('M','X','3','N'), VCodecStatus_Working, {IMGFMT_YV12, IMGFMT_I420, I... [truncated message content] |
From: <nic...@us...> - 2012-12-06 13:54:07
|
Revision: 513 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=513&view=rev Author: nickols_k Date: 2012-12-06 13:53:54 +0000 (Thu, 06 Dec 2012) Log Message: ----------- convert struct stream_driver_t into class Stream_Interface note: many stream drivers became untested. Many other sources were modified to not be depended from struct stream_t Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/libmpdemux/asf.h mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_audio.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_dv.cpp mplayerxp/libmpdemux/demux_film.cpp mplayerxp/libmpdemux/demux_lavf.cpp mplayerxp/libmpdemux/demux_mkv.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_nsv.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_roq.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer_r.cpp mplayerxp/libmpdemux/demuxer_stream.h mplayerxp/libmpdemux/stheader.cpp mplayerxp/libmpstream/Makefile mplayerxp/libmpstream/asf_mmst_streaming.cpp mplayerxp/libmpstream/asf_streaming.cpp mplayerxp/libmpstream/asf_streaming.h mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/cdd.h mplayerxp/libmpstream/cdda.cpp mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/mrl.cpp mplayerxp/libmpstream/mrl.h mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/pnm.cpp mplayerxp/libmpstream/pnm.h mplayerxp/libmpstream/rtp.cpp mplayerxp/libmpstream/rtp.h mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_lavc.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_null.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/stream_internal.h mplayerxp/libmpstream/tcp.cpp mplayerxp/libmpstream/tcp.h mplayerxp/libmpstream/tvi/frequencies.cpp mplayerxp/libmpstream/tvi/frequencies.h mplayerxp/libmpstream/tvi/tv.h mplayerxp/libmpstream/tvi/tvi_def.h mplayerxp/libmpstream/tvi/tvi_dummy.cpp mplayerxp/libplaytree/asxparser.cpp mplayerxp/libplaytree/playtreeparser.cpp mplayerxp/mp-opt-reg.cpp mplayerxp/mplayerxp.cpp Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/dump.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -44,7 +44,7 @@ const char *ext,*name; MP_UNIT("dumpstream"); stream_reset(stream); - stream_seek(stream,stream->start_pos); + stream_seek(stream,stream->start_pos()); ext=".ext"; if(!port) { Modified: mplayerxp/libmpdemux/asf.h =================================================================== --- mplayerxp/libmpdemux/asf.h 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/asf.h 2012-12-06 13:53:54 UTC (rev 513) @@ -134,12 +134,12 @@ } ASF_StreamType_e; typedef struct { - ASF_StreamType_e streaming_type; + ASF_StreamType_e networking_type; int request; int packet_size; int *audio_streams,n_audio,*video_streams,n_video; int audio_id, video_id; -} asf_http_streaming_ctrl_t; +} asf_http_networking_t; /* Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -334,10 +334,10 @@ if(streams) { uint32_t vr = 0, ar = 0,i; #ifdef HAVE_STREAMING - if( demuxer->stream->streaming_ctrl!=NULL ) { - if( demuxer->stream->streaming_ctrl->bandwidth!=0 && demuxer->stream->streaming_ctrl->data!=NULL ) { - best_audio = ((asf_http_streaming_ctrl_t*)demuxer->stream->streaming_ctrl->data)->audio_id; - best_video = ((asf_http_streaming_ctrl_t*)demuxer->stream->streaming_ctrl->data)->video_id; + if( demuxer->stream->networking!=NULL ) { + if( demuxer->stream->networking->bandwidth!=0 && demuxer->stream->networking->data!=NULL ) { + best_audio = ((asf_http_networking_t*)demuxer->stream->networking->data)->audio_id; + best_video = ((asf_http_networking_t*)demuxer->stream->networking->data)->video_id; } } else #endif Modified: mplayerxp/libmpdemux/demux_audio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_audio.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_audio.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -444,13 +444,13 @@ if(stream_eof(s)) return 0; } - if(s->end_pos) { + if(s->end_pos()) { char tag[4]; - stream_seek(s,s->end_pos-128); + stream_seek(s,s->end_pos()-128); stream_read(s,tag,3); tag[3] = '\0'; if(strcmp(tag,"TAG")) - demuxer->movi_end = s->end_pos; + demuxer->movi_end = s->end_pos(); else { char buf[31]; uint8_t g; @@ -487,7 +487,7 @@ uint8_t b[8]; unsigned n; stream_t *s=demuxer->stream; - demuxer->movi_end = s->end_pos; + demuxer->movi_end = s->end_pos(); memcpy(b,hdr,4); stream_seek(s,pos+4); stream_read(s,&b[4],4); @@ -511,7 +511,7 @@ uint8_t b[12]; unsigned n; stream_t *s=demuxer->stream; - demuxer->movi_end = s->end_pos; + demuxer->movi_end = s->end_pos(); memcpy(b,hdr,4); stream_seek(s,pos+4); stream_read(s,&b[4],8); @@ -882,7 +882,7 @@ priv = new(zeromem) da_priv_t; s = demuxer->stream; stream_reset(s); - stream_seek(s,s->start_pos); + stream_seek(s,s->start_pos()); while(n < 5 && !stream_eof(s)) { st_pos = stream_tell(s); @@ -1014,7 +1014,7 @@ sh_audio = demuxer->new_sh_audio(); MSG_DBG2("mp3_header off: st_pos=%lu n=%lu HDR_SIZE=%u\n",st_pos,n,HDR_SIZE); demuxer->movi_start = stream_tell(s); - demuxer->movi_end = s->end_pos; + demuxer->movi_end = s->end_pos(); switch(frmt) { case RAW_FLAC: { @@ -1101,7 +1101,7 @@ w->nBlockAlign = sh_audio->nch*afmt2bps(sh_audio->afmt); w->wBitsPerSample = 8*afmt2bps(sh_audio->afmt); w->cbSize = 0; - demuxer->movi_start = demuxer->stream->start_pos+hsize; + demuxer->movi_start = demuxer->stream->start_pos()+hsize; demuxer->movi_end = demuxer->movi_start+hsize+dsize; demuxer->movi_length = (demuxer->movi_end-demuxer->movi_start)/w->nAvgBytesPerSec; } @@ -1158,7 +1158,7 @@ priv->pos = 32; // empty bit buffer priv->length = 1152 * frames / (float)sh_audio->wf->nSamplesPerSec; demuxer->movi_start = 24; /* skip header */ - demuxer->movi_end = s->end_pos; + demuxer->movi_end = s->end_pos(); if (demuxer->movi_end > demuxer->movi_start && priv->length > 1) sh_audio->wf->nAvgBytesPerSec = (demuxer->movi_end - demuxer->movi_start) / priv->length; else @@ -1340,10 +1340,10 @@ stream_seek(s,data_off); stream_read(s,hdr,4); MSG_DBG2("Trying id3v1 at %llX\n",data_off); - if(!read_mp3v1_tags(demuxer,hdr,data_off)) demuxer->movi_end = s->end_pos; + if(!read_mp3v1_tags(demuxer,hdr,data_off)) demuxer->movi_end = s->end_pos(); } else - demuxer->movi_end = s->end_pos; + demuxer->movi_end = s->end_pos(); stream_seek(s,data_off); } break; } Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_avi.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -158,7 +158,7 @@ if(!demuxer->movi_start) demuxer->movi_start=stream_tell(demuxer->stream); demuxer->movi_end=stream_tell(demuxer->stream)+len; MSG_V("Found movie at 0x%X - 0x%X\n",(int)demuxer->movi_start,(int)demuxer->movi_end); - if(demuxer->stream->end_pos>demuxer->movi_end) demuxer->movi_end=demuxer->stream->end_pos; + if(demuxer->stream->end_pos()>demuxer->movi_end) demuxer->movi_end=demuxer->stream->end_pos(); if(index_mode==-2 || index_mode==2 || index_mode==0) break; // reading from non-seekable source (stdin) or forced index or no index forced if(list_end>0) stream_seek(demuxer->stream,list_end); // skip movi @@ -609,7 +609,7 @@ if (mp_conf.verbose>=2) print_index(priv->idx, priv->idx_size); - demuxer->movi_end=demuxer->stream->end_pos; + demuxer->movi_end=demuxer->stream->end_pos(); freeout: @@ -1141,7 +1141,7 @@ demuxer->priv=priv; //---- AVI header: - read_avi_header(demuxer,(demuxer->stream->type&STREAMTYPE_SEEKABLE)?index_mode:-2); + read_avi_header(demuxer,(demuxer->stream->type()&STREAMTYPE_SEEKABLE)?index_mode:-2); 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); Modified: mplayerxp/libmpdemux/demux_dv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_dv.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_dv.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -142,7 +142,7 @@ rawdv_frames_t *frames = new rawdv_frames_t; dv_decoder_t *dv_decoder=NULL; - MSG_V("demux_open_rawdv() end_pos %" PRId64"\n",(int64_t)demuxer->stream->end_pos); + MSG_V("demux_open_rawdv() end_pos %" PRId64"\n",(int64_t)demuxer->stream->end_pos()); // go back to the beginning stream_reset(demuxer->stream); @@ -197,7 +197,7 @@ frames->current_filepos=0; frames->current_frame=0; frames->frame_size=dv_decoder->frame_size; - frames->frame_number=demuxer->stream->end_pos/frames->frame_size; + frames->frame_number=demuxer->stream->end_pos()/frames->frame_size; MSG_V("demux_open_rawdv() seek to %qu, size: %d, dv_dec->frame_size: %d\n",frames->current_filepos,frames->frame_size, dv_decoder->frame_size); if (dv_decoder->audio != NULL && demuxer->audio->id>=-1){ Modified: mplayerxp/libmpdemux/demux_film.cpp =================================================================== --- mplayerxp/libmpdemux/demux_film.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_film.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -228,7 +228,7 @@ // go back to the beginning stream_reset(demuxer->stream); - stream_seek(demuxer->stream, demuxer->stream->start_pos); + stream_seek(demuxer->stream, demuxer->stream->start_pos()); // read the master chunk type chunk_type = stream_read_fourcc(demuxer->stream); @@ -245,7 +245,7 @@ header_size = stream_read_dword(demuxer->stream); film_data->film_version = stream_read_fourcc(demuxer->stream); demuxer->movi_start = header_size; - demuxer->movi_end = demuxer->stream->end_pos; + demuxer->movi_end = demuxer->stream->end_pos(); header_size -= 16; MSG_HINT( "FILM version %.4s\n", Modified: mplayerxp/libmpdemux/demux_lavf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_lavf.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -146,11 +146,11 @@ if(whence == SEEK_CUR) pos +=stream_tell(stream); else if(whence == SEEK_END) - pos += stream->end_pos; + pos += stream->end_pos(); else if(whence != SEEK_SET) return -1; - if(pos<stream->end_pos && stream->eof) + if(pos<stream->end_pos() && stream->eof) stream_reset(stream); if(stream_seek(stream, pos)==0) return -1; Modified: mplayerxp/libmpdemux/demux_mkv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mkv.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_mkv.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -2791,7 +2791,7 @@ stream_t *s = demuxer->stream; int version; char *str; - stream_seek(s, s->start_pos); + stream_seek(s, s->start_pos()); str = ebml_read_header (s, &version); if (str == NULL || strcmp (str, "matroska") || version > 1) { MSG_DBG2( "[mkv] no head found\n"); @@ -2809,7 +2809,7 @@ int i, version, cont = 0; char *str; - stream_seek(s, s->start_pos); + stream_seek(s, s->start_pos()); str = ebml_read_header (s, &version); if (str == NULL || strcmp (str, "matroska") || version > 2) { MSG_DBG2( "[mkv] no head found\n"); @@ -3045,12 +3045,12 @@ } } - if (s->end_pos == 0 || (mkv_d->indexes == NULL && index_mode < 0)) + if (s->end_pos() == 0 || (mkv_d->indexes == NULL && index_mode < 0)) demuxer->flags &= ~(Demuxer::Seekable); else { - demuxer->movi_start = s->start_pos; - demuxer->movi_end = s->end_pos; + demuxer->movi_start = s->start_pos(); + demuxer->movi_end = s->end_pos(); demuxer->flags |= Demuxer::Seekable; if (mkv_d->chapters && dvd_chapter>1 && dvd_chapter<=mkv_d->num_chapters) { Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -561,7 +561,7 @@ } if(newpos<demuxer->movi_start){ - if(!(demuxer->stream->type&STREAMTYPE_PROGRAM)) demuxer->movi_start=0; // for VCD + if(!(demuxer->stream->type()&STREAMTYPE_PROGRAM)) demuxer->movi_start=0; // for VCD if(newpos<demuxer->movi_start) newpos=demuxer->movi_start; } @@ -673,7 +673,7 @@ code = bswap_32(code); /* test stream only if stream is started from 0000001XX */ if ((code & 0xffffff00) == 0x100) { - stream_seek(demuxer->stream,demuxer->stream->start_pos); + stream_seek(demuxer->stream,demuxer->stream->start_pos()); memset(&mpg_stat,0,sizeof(struct mpg_stat_s)); while(pes>=0){ @@ -763,7 +763,7 @@ if(!demuxer->get_sh_video()) demuxer->new_sh_video(); if(demuxer->video->id==-1) demuxer->video->id=0; demuxer->video->sh=demuxer->get_sh_video(); - stream_seek(demuxer->stream,demuxer->stream->start_pos); + stream_seek(demuxer->stream,demuxer->stream->start_pos()); return mpges_demux(demuxer,demuxer->video)?MPXP_Ok:MPXP_False; } else { /* Modified: mplayerxp/libmpdemux/demux_nsv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nsv.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_nsv.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -334,7 +334,7 @@ return MPXP_False; // not an NSV file stream_reset(demuxer->stream); // clear EOF - stream_seek(demuxer->stream,demuxer->stream->start_pos); + stream_seek(demuxer->stream,demuxer->stream->start_pos()); return MPXP_Ok; } Modified: mplayerxp/libmpdemux/demux_nuv.cpp =================================================================== --- mplayerxp/libmpdemux/demux_nuv.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_nuv.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -225,7 +225,7 @@ /* Go to the start */ stream_reset(demuxer->stream); - stream_seek(demuxer->stream, demuxer->stream->start_pos); + stream_seek(demuxer->stream, demuxer->stream->start_pos()); stream_read ( demuxer->stream, (char*)& rtjpeg_fileheader, sizeof(rtjpeg_fileheader) ); le2me_rtfileheader(&rtjpeg_fileheader); Modified: mplayerxp/libmpdemux/demux_ogg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_ogg.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -668,7 +668,7 @@ if(p > 1 || (p == 1 && ! ogg_page_continued(page))) last_pos = pos; pos += np; - if(index_mode == 2) MSG_V("Building syncpoint table %d%%\r",(int)(pos*100/s->end_pos)); + if(index_mode == 2) MSG_V("Building syncpoint table %d%%\r",(int)(pos*100/s->end_pos())); } if(index_mode == 2) MSG_V("\n"); @@ -1033,7 +1033,7 @@ } } /// Add the header packets if the stream isn't seekable - if(ds && !s->end_pos) { + if(ds && !s->end_pos()) { /// Finish the page, otherwise packets will be lost do { demux_ogg_add_packet(ds,&ogg_d->subs[ogg_d->num_sub],ogg_d->num_sub,&pack); @@ -1069,11 +1069,11 @@ } ogg_d->final_granulepos=0; - if(!s->end_pos) + if(!s->end_pos()) demuxer->flags &= ~(Demuxer::Seekable); else { - demuxer->movi_start = s->start_pos; // Needed for XCD (Ogg written in MODE2) - demuxer->movi_end = s->end_pos; + demuxer->movi_start = s->start_pos(); // Needed for XCD (Ogg written in MODE2) + demuxer->movi_end = s->end_pos(); demuxer->flags |= Demuxer::Seekable; demux_ogg_scan_stream(demuxer); } Modified: mplayerxp/libmpdemux/demux_pva.cpp =================================================================== --- mplayerxp/libmpdemux/demux_pva.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_pva.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -174,7 +174,7 @@ sh_audio->ds=demuxer->audio; demuxer->movi_start=0; - demuxer->movi_end=demuxer->stream->end_pos; + demuxer->movi_end=demuxer->stream->end_pos(); priv->last_video_pts=-1; priv->last_audio_pts=-1; Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -36,7 +36,7 @@ static MPXP_Rc rawaudio_probe(Demuxer* demuxer) { - if(demuxer->stream->type & STREAMTYPE_RAWAUDIO || use_rawaudio) { + if(demuxer->stream->type() & STREAMTYPE_RAWAUDIO || use_rawaudio) { demuxer->file_format=Demuxer::Type_RAWAUDIO; return MPXP_Ok; } @@ -64,14 +64,14 @@ w->wBitsPerSample = samplesize*8; w->cbSize = 0; print_wave_header(w,sizeof(WAVEFORMATEX)); - demuxer->movi_start = demuxer->stream->start_pos; - demuxer->movi_end = demuxer->stream->end_pos; + demuxer->movi_start = demuxer->stream->start_pos(); + demuxer->movi_end = demuxer->stream->end_pos(); demuxer->movi_length = (demuxer->movi_end-demuxer->movi_start)/w->nAvgBytesPerSec; demuxer->audio->sh = sh_audio; demuxer->audio->id = 0; sh_audio->ds = demuxer->audio; - if(!(demuxer->stream->type & STREAMTYPE_SEEKABLE)) demuxer->flags &= ~Demuxer::Seekable; + if(!(demuxer->stream->type() & STREAMTYPE_SEEKABLE)) demuxer->flags &= ~Demuxer::Seekable; check_pin("demuxer",demuxer->pin,DEMUX_PIN); return demuxer; } Modified: mplayerxp/libmpdemux/demux_rawvideo.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -60,7 +60,7 @@ static MPXP_Rc rawvideo_probe(Demuxer* demuxer) { - if(demuxer->stream->type & STREAMTYPE_RAWVIDEO || priv.use_rawvideo) { + if(demuxer->stream->type() & STREAMTYPE_RAWVIDEO || priv.use_rawvideo) { priv.fps=25; demuxer->file_format=Demuxer::Type_RAWVIDEO; return MPXP_Ok; @@ -110,8 +110,8 @@ sh_video->src_w=priv.width; sh_video->src_h=priv.height; - demuxer->movi_start = demuxer->stream->start_pos; - demuxer->movi_end = demuxer->stream->end_pos; + demuxer->movi_start = demuxer->stream->start_pos(); + demuxer->movi_end = demuxer->stream->end_pos(); demuxer->movi_length = (demuxer->movi_end-demuxer->movi_start)/(priv.fps*priv.imgsize); demuxer->video->sh = sh_video; Modified: mplayerxp/libmpdemux/demux_roq.cpp =================================================================== --- mplayerxp/libmpdemux/demux_roq.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_roq.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -60,7 +60,7 @@ static MPXP_Rc roq_probe(Demuxer *demuxer) { stream_reset(demuxer->stream); - stream_seek(demuxer->stream, demuxer->stream->start_pos); + stream_seek(demuxer->stream, demuxer->stream->start_pos()); if ((stream_read_dword(demuxer->stream) == 0x8410FFFF) && ((stream_read_dword(demuxer->stream) & 0xFFFF0000) == 0xFFFF0000)) { @@ -118,7 +118,7 @@ roq_data->chunks = NULL; // position the stream and start traversing - stream_seek(demuxer->stream, demuxer->stream->start_pos+6); + stream_seek(demuxer->stream, demuxer->stream->start_pos()+6); fps = stream_read_word_le(demuxer->stream); while (!stream_eof(demuxer->stream)) { Modified: mplayerxp/libmpdemux/demux_ty.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ty.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demux_ty.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -408,13 +408,13 @@ { off_t offset; - numberParts = demux->stream->end_pos / TIVO_PART_LENGTH; + numberParts = demux->stream->end_pos() / TIVO_PART_LENGTH; offset = numberParts * TIVO_PART_LENGTH; MSG_DBG3( "ty:ty/ty+Number Parts %"PRId64"\n", (int64_t)numberParts ); - if ( offset + CHUNKSIZE < demux->stream->end_pos ) + if ( offset + CHUNKSIZE < demux->stream->end_pos() ) { stream_seek( demux->stream, offset ); readSize = stream_read( demux->stream, chunk, CHUNKSIZE ); @@ -441,8 +441,8 @@ } } - if ( demux->stream->start_pos > 0 ) - filePos = demux->stream->start_pos; + if ( demux->stream->start_pos() > 0 ) + filePos = demux->stream->start_pos(); stream_seek( demux->stream, filePos ); demux->filepos = stream_tell( demux->stream ); tivo->whichChunk = filePos / CHUNKSIZE; @@ -459,7 +459,7 @@ MSG_DBG3( "ty:ty which Chunk %d\n", tivo->whichChunk ); MSG_DBG3( - "ty:file end_pos %"PRIx64"\n", (int64_t)demux->stream->end_pos ); + "ty:file end_pos %"PRIx64"\n", (int64_t)demux->stream->end_pos()); MSG_DBG3( "\nty:wanted current offset %"PRIx64"\n", (int64_t)stream_tell( demux->stream ) ); Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -117,8 +117,8 @@ void Demuxer::_init(stream_t *_stream,int a_id,int v_id,int s_id) { stream=_stream; - movi_start=_stream->start_pos; - movi_end=_stream->end_pos; + movi_start=_stream->start_pos(); + movi_end=_stream->end_pos(); movi_length=UINT_MAX; flags|=Seekable; synced=0; @@ -127,7 +127,7 @@ video=new(zeromem) Demuxer_Stream(this,v_id); sub=new(zeromem) Demuxer_Stream(this,s_id); stream_reset(_stream); - stream_seek(_stream,stream->start_pos); + stream_seek(_stream,stream->start_pos()); } Demuxer::Demuxer() @@ -318,7 +318,7 @@ MSG_V("Forcing %s ... ",drv->name); /* don't remove it from loop!!! (for initializing) */ stream_reset(stream); - stream_seek(stream,stream->start_pos); + 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; @@ -331,7 +331,7 @@ MSG_V("Probing %s ... ",ddrivers[i]->name); /* don't remove it from loop!!! (for initializing) */ stream_reset(stream); - stream_seek(stream,stream->start_pos); + stream_seek(stream,stream->start_pos()); if(ddrivers[i]->probe(this)==MPXP_Ok) { MSG_V("OK\n"); dpriv.driver = ddrivers[i]; @@ -423,7 +423,7 @@ 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)) + if(!(stream->type()&STREAMTYPE_SEEKABLE)) { MSG_WARN("Stream is not seekable\n"); return 0; Modified: mplayerxp/libmpdemux/demuxer_r.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -52,7 +52,7 @@ if(ds->pts_flags && ds->pts < 1.0 && ds->prev_pts > 2.0) { float spts; - spts=ds->demuxer->stream->stream_pts; + spts=ds->demuxer->stream->stream_pts(); ds->pts_corr=spts>0?spts:ds->prev_pts; ds->pts_flags=0; MSG_V("***PTS discontinuity happens*** correct audio %f pts as %f\n",ds->pts,ds->pts_corr); Modified: mplayerxp/libmpdemux/demuxer_stream.h =================================================================== --- mplayerxp/libmpdemux/demuxer_stream.h 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/demuxer_stream.h 2012-12-06 13:53:54 UTC (rev 513) @@ -7,9 +7,9 @@ #include <stdint.h> #include "demuxer_packet.h" -struct stream_t; namespace mpxp { struct Demuxer; + struct stream_t; class Demuxer_Stream : public Opaque { public: Demuxer_Stream(Demuxer *demuxer,int id); Modified: mplayerxp/libmpdemux/stheader.cpp =================================================================== --- mplayerxp/libmpdemux/stheader.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpdemux/stheader.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -580,7 +580,7 @@ if(d_video.pts_flags && d_video.pts < 1.0 && d_video.prev_pts > 2.0) { float spts; - spts=d_video.demuxer->stream->stream_pts; + spts=d_video.demuxer->stream->stream_pts(); d_video.pts_corr=spts>0?spts:d_video.prev_pts; d_video.pts_flags=0; MSG_V("***PTS discontinuity happens*** correcting video %f pts as %f\n",d_video.pts,d_video.pts_corr); Modified: mplayerxp/libmpstream/Makefile =================================================================== --- mplayerxp/libmpstream/Makefile 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/Makefile 2012-12-06 13:53:54 UTC (rev 513) @@ -7,7 +7,7 @@ DO_ALL = @ for i in $(SUBDIRS); do $(MAKE) -C $$i all || exit; done CXXSRCS= s_file.cpp s_lavc.cpp s_null.cpp s_tv.cpp -CXXSRCS+= cache2.cpp mrl.cpp stream.cpp url.cpp +CXXSRCS+= mrl.cpp stream.cpp url.cpp cache2.cpp ifeq ($(HAVE_LIBCDIO_CDDA),yes) CXXSRCS += s_cdd.cpp CXXSRCS += cdda.cpp Modified: mplayerxp/libmpstream/asf_mmst_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/asf_mmst_streaming.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -205,7 +205,7 @@ } -static int get_header (int s, uint8_t *header, streaming_ctrl_t *streaming_ctrl) +static int get_header (int s, uint8_t *header, networking_t *networking) { unsigned char pre_header[8]; int header_len; @@ -240,7 +240,7 @@ if ( (header[header_len-1] == 1) && (header[header_len-2]==1)) { - if( streaming_bufferize( streaming_ctrl, header, header_len )<0 ) { + if( networking_bufferize( networking, header, header_len )<0 ) { return -1; } @@ -363,7 +363,7 @@ } -static int get_media_packet (int s, int padding, streaming_ctrl_t *stream_ctrl) { +static int get_media_packet (int s, int padding, networking_t *stream_ctrl) { unsigned char pre_header[8]; unsigned char data[BUF_SIZE]; @@ -394,7 +394,7 @@ return 0; } - streaming_bufferize(stream_ctrl, data, padding); + networking_bufferize(stream_ctrl, data, padding); } else { @@ -454,7 +454,7 @@ static int packet_length1; -static int asf_mmst_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *stream_ctrl ) +static int asf_mmst_networking_read( int fd, char *buffer, int size, networking_t *stream_ctrl ) { int len; @@ -482,16 +482,16 @@ } -static int asf_mmst_streaming_seek( int fd, off_t pos, streaming_ctrl_t *streaming_ctrl ) +static int asf_mmst_networking_seek( int fd, off_t pos, networking_t *networking ) { return -1; // Shut up gcc warning fd++; pos++; - streaming_ctrl=NULL; + networking=NULL; } -int asf_mmst_streaming_start(libinput_t* libinput,stream_t *stream) +int asf_mmst_networking_start(net_fd_t* fd, networking_t *networking) { char str[1024]; unsigned char data[BUF_SIZE]; @@ -499,12 +499,12 @@ int asf_header_len; int len, i, packet_length; char *path, *unescpath; - URL_t *url1 = stream->streaming_ctrl->url; - int s = stream->fd; + URL_t *url1 = networking->url; + net_fd_t s = *fd; if( s>0 ) { - closesocket( stream->fd ); - stream->fd = -1; + closesocket( *fd ); + *fd = -1; } /* parse url */ @@ -524,7 +524,7 @@ if( url1->port==0 ) { url1->port=1755; } - s = tcp_connect2Server(libinput, url1->hostname, url1->port, 0); + s = tcp_connect2Server(networking->libinput, url1->hostname, url1->port, 0); if( s<0 ) { delete path; return s; @@ -592,7 +592,7 @@ num_stream_ids = 0; /* get_headers(s, asf_header); */ - asf_header_len = get_header (s, asf_header, stream->streaming_ctrl); + asf_header_len = get_header (s, asf_header, networking); // printf("---------------------------------- asf_header %d\n",asf_header); if (asf_header_len==0) { //error reading header closesocket(s); @@ -646,11 +646,11 @@ send_command (s, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data); - stream->fd = s; - stream->streaming_ctrl->streaming_read = asf_mmst_streaming_read; - stream->streaming_ctrl->streaming_seek = asf_mmst_streaming_seek; - stream->streaming_ctrl->buffering = 1; - stream->streaming_ctrl->status = streaming_playing_e; + *fd = s; + networking->networking_read = asf_mmst_networking_read; + networking->networking_seek = asf_mmst_networking_seek; + networking->buffering = 1; + networking->status = networking_playing_e; packet_length1 = packet_length; MSG_V("mmst packet_length = %d\n",packet_length); Modified: mplayerxp/libmpstream/asf_streaming.cpp =================================================================== --- mplayerxp/libmpstream/asf_streaming.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/asf_streaming.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -34,12 +34,12 @@ ((guid)[3] << 24 | (guid)[2] << 16 | (guid)[1] << 8 | (guid)[0]) #endif -// ASF streaming support several network protocol. +// ASF networking support several network protocol. // One use UDP, not known, yet! // Another is HTTP, this one is known. // So for now, we use the HTTP protocol. // -// We can try several protocol for asf streaming +// We can try several protocol for asf networking // * first the UDP protcol, if there is a firewall, UDP // packets will not come back, so the mmsu will failed. // * Then we can try TCP, but if there is a proxy for @@ -52,15 +52,15 @@ // WMP sequence is MMSU then MMST and then HTTP. // In MPlayer case since HTTP support is more reliable, // we are doing HTTP first then we try MMST if HTTP fail. -static int asf_http_streaming_start(libinput_t*,stream_t *stream, int *demuxer_type ); +static int asf_http_networking_start(net_fd_t* fd, networking_t *networking ); /* - ASF streaming support several network protocol. + ASF networking support several network protocol. One use UDP, not known, yet! Another is HTTP, this one is known. So for now, we use the HTTP protocol. - We can try several protocol for asf streaming + We can try several protocol for asf networking * first the UDP protcol, if there is a firewall, UDP packets will not come back, so the mmsu will failed. * Then we can try TCP, but if there is a proxy for @@ -74,59 +74,54 @@ In MPlayer case since HTTP support is more reliable, we are doing HTTP first then we try MMST if HTTP fail. */ -int asf_streaming_start(libinput_t* libinput, stream_t *stream, int *demuxer_type) { - char *proto = stream->streaming_ctrl->url->protocol; - int fd = -1; - int port = stream->streaming_ctrl->url->port; +int asf_networking_start(net_fd_t* fd, networking_t *networking) { + char *proto = networking->url->protocol; + *fd = -1; + int port = networking->url->port; // Is protocol even valid mms,mmsu,mmst,http,http_proxy? if (!(!strncasecmp(proto, "mmst", 4) || !strncasecmp(proto, "mmsu", 4) || !strncasecmp(proto, "http_proxy", 10) || !strncasecmp(proto, "mms", 3) || - !strncasecmp(proto, "http", 4))) - { + !strncasecmp(proto, "http", 4))) { MSG_ERR("Unknown protocol: %s\n", proto ); return -1; } // Is protocol mms or mmsu? - if (!strncasecmp(proto, "mmsu", 4) || !strncasecmp(proto, "mms", 3)) - { - MSG_V("Trying ASF/UDP...\n"); - //fd = asf_mmsu_streaming_start( stream ); - if( fd>-1 ) return fd; //mmsu support is not implemented yet - using this code - MSG_V(" ===> ASF/UDP failed\n"); - if( fd==-2 ) return -1; - } + if (!strncasecmp(proto, "mmsu", 4) || !strncasecmp(proto, "mms", 3)) { + MSG_V("Trying ASF/UDP...\n"); + //fd = asf_mmsu_networking_start( stream ); + if( *fd>-1 ) return 0; //mmsu support is not implemented yet - using this code + MSG_V(" ===> ASF/UDP failed\n"); + if( *fd==-2 ) return -1; + } //Is protocol mms or mmst? - if (!strncasecmp(proto, "mmst", 4) || !strncasecmp(proto, "mms", 3)) - { - MSG_V("Trying ASF/TCP...\n"); - fd = asf_mmst_streaming_start(libinput, stream ); - stream->streaming_ctrl->url->port = port; - if( fd>-1 ) return fd; - MSG_V(" ===> ASF/TCP failed\n"); - if( fd==-2 ) return -1; - } + if (!strncasecmp(proto, "mmst", 4) || !strncasecmp(proto, "mms", 3)) { + MSG_V("Trying ASF/TCP...\n"); + *fd = asf_mmst_networking_start(fd,networking); + networking->url->port = port; + if( *fd>-1 ) return 0; + MSG_V(" ===> ASF/TCP failed\n"); + if( *fd==-2 ) return -1; + } //Is protocol http, http_proxy, or mms? if (!strncasecmp(proto, "http_proxy", 10) || !strncasecmp(proto, "http", 4) || - !strncasecmp(proto, "mms", 3)) - { - MSG_V("Trying ASF/HTTP...\n"); - fd = asf_http_streaming_start(libinput, stream, demuxer_type ); - stream->streaming_ctrl->url->port = port; - if( fd>-1 ) return fd; - MSG_V(" ===> ASF/HTTP failed\n"); - if( fd==-2 ) return -1; - } - + !strncasecmp(proto, "mms", 3)) { + MSG_V("Trying ASF/HTTP...\n"); + *fd = asf_http_networking_start(fd,networking); + networking->url->port = port; + if( *fd>-1 ) return 0; + MSG_V(" ===> ASF/HTTP failed\n"); + if( *fd==-2 ) return -1; + } //everything failed - return -1; + return -1; } static int -asf_streaming(ASF_stream_chunck_t *stream_chunck, int *drop_packet ) { +asf_networking(ASF_stream_chunck_t *stream_chunck, int *drop_packet ) { if( drop_packet!=NULL ) *drop_packet = 0; if( stream_chunck->size<8 ) { @@ -191,16 +186,16 @@ } static int -asf_streaming_parse_header(int fd, streaming_ctrl_t* streaming_ctrl) { +asf_networking_parse_header(int fd, networking_t* networking) { ASF_header_t asfh; ASF_stream_chunck_t chunk; - asf_http_streaming_ctrl_t* asf_ctrl = (asf_http_streaming_ctrl_t*) streaming_ctrl->data; + asf_http_networking_t* asf_ctrl = (asf_http_networking_t*) networking->data; char* buffer=NULL, *chunk_buffer=NULL; int i,r,size,pos = 0; int start; int buffer_size = 0; int chunk_size2read = 0; - int bw = streaming_ctrl->bandwidth; + int bw = networking->bandwidth; int *v_rates = NULL, *a_rates = NULL; int v_rate = 0, a_rate = 0, a_idx = -1, v_idx = -1; @@ -211,13 +206,13 @@ // So we need to retrieve all the chunk before starting to parse the header. do { for( r=0; r < (int)sizeof(ASF_stream_chunck_t) ; ) { - i = nop_streaming_read(fd,((char*)&chunk)+r,sizeof(ASF_stream_chunck_t) - r,streaming_ctrl); + i = nop_networking_read(fd,((char*)&chunk)+r,sizeof(ASF_stream_chunck_t) - r,networking); if(i <= 0) return -1; r += i; } // Endian handling of the stream chunk le2me_ASF_stream_chunck_t(&chunk); - size = asf_streaming( &chunk, &r) - sizeof(ASF_stream_chunck_t); + size = asf_networking( &chunk, &r) - sizeof(ASF_stream_chunck_t); if(r) MSG_WARN("Warning : drop header ????\n"); if(size < 0){ MSG_ERR("Error while parsing chunk header\n"); @@ -244,7 +239,7 @@ buffer_size += size; for(r = 0; r < size;) { - i = nop_streaming_read(fd,buffer+r,size-r,streaming_ctrl); + i = nop_networking_read(fd,buffer+r,size-r,networking); if(i < 0) { MSG_ERR("Error while reading network stream\n"); return -1; @@ -288,7 +283,7 @@ asf_ctrl->packet_size = fileh->max_packet_size; // before playing. // preroll: time in ms to bufferize before playing - streaming_ctrl->prebuffer_size = (unsigned int)(((double)fileh->preroll/1000.0)*((double)fileh->max_bitrate/8.0)); + networking->prebuffer_size = (unsigned int)(((double)fileh->preroll/1000.0)*((double)fileh->max_bitrate/8.0)); } pos = start; @@ -443,19 +438,19 @@ } static int -asf_http_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *streaming_ctrl ) { +asf_http_networking_read( int fd, char *buffer, int size, networking_t *networking ) { static ASF_stream_chunck_t chunk; int read,chunk_size = 0; static int rest = 0, drop_chunk = 0, waiting = 0; - asf_http_streaming_ctrl_t *asf_http_ctrl = (asf_http_streaming_ctrl_t*)streaming_ctrl->data; + asf_http_networking_t *asf_http_ctrl = (asf_http_networking_t*)networking->data; while(1) { if (rest == 0 && waiting == 0) { read = 0; while(read < (int)sizeof(ASF_stream_chunck_t)){ - int r = nop_streaming_read( fd, ((char*)&chunk) + read, + int r = nop_networking_read( fd, ((char*)&chunk) + read, sizeof(ASF_stream_chunck_t)-read, - streaming_ctrl ); + networking ); if(r <= 0){ if( r < 0) MSG_ERR("Error while reading chunk header\n"); @@ -466,7 +461,7 @@ // Endian handling of the stream chunk le2me_ASF_stream_chunck_t(&chunk); - chunk_size = asf_streaming( &chunk, &drop_chunk ); + chunk_size = asf_networking( &chunk, &drop_chunk ); if(chunk_size < 0) { MSG_ERR("Error while parsing chunk header\n"); return -1; @@ -495,7 +490,7 @@ chunk_size = size; } while(read < chunk_size) { - int got = nop_streaming_read( fd,buffer+read,chunk_size-read,streaming_ctrl ); + int got = nop_networking_read( fd,buffer+read,chunk_size-read,networking ); if(got <= 0) { if(got < 0) MSG_ERR("Error while reading chunk\n"); @@ -519,12 +514,12 @@ } static int -asf_http_streaming_seek( int fd, off_t pos, streaming_ctrl_t *streaming_ctrl ) { +asf_http_networking_seek( int fd, off_t pos, networking_t *networking ) { return -1; // to shut up gcc warning fd++; pos++; - streaming_ctrl=NULL; + networking=NULL; } static int @@ -539,7 +534,7 @@ } static ASF_StreamType_e -asf_http_streaming_type(char *content_type, char *features, HTTP_header_t *http_hdr ) { +asf_http_networking_type(char *content_type, char *features, HTTP_header_t *http_hdr ) { if( content_type==NULL ) return ASF_Unknown_e; if( !strcasecmp(content_type, "application/octet-stream") || !strcasecmp(content_type, "application/vnd.ms.wms-hdr.asfv1") || // New in Corona, first request @@ -592,11 +587,11 @@ } static HTTP_header_t * -asf_http_request(streaming_ctrl_t *streaming_ctrl) { +asf_http_request(networking_t *networking) { HTTP_header_t *http_hdr; URL_t *url = NULL; URL_t *server_url = NULL; - asf_http_streaming_ctrl_t *asf_http_ctrl; + asf_http_networking_t *asf_http_ctrl; char str[250]; char *ptr; int i, enable; @@ -605,9 +600,9 @@ int asf_nb_stream=0, stream_id; // Sanity check - if( streaming_ctrl==NULL ) return NULL; - url = streaming_ctrl->url; - asf_http_ctrl = (asf_http_streaming_ctrl_t*)streaming_ctrl->data; + if( networking==NULL ) return NULL; + url = networking->url; + asf_http_ctrl = (asf_http_networking_t*)networking->data; if( url==NULL || asf_http_ctrl==NULL ) return NULL; // Common header for all requests. @@ -639,7 +634,7 @@ offset_hi, offset_lo, asf_http_ctrl->request, length ); http_set_field( http_hdr, str ); - switch( asf_http_ctrl->streaming_type ) { + switch( asf_http_ctrl->networking_type ) { case ASF_Live_e: case ASF_Prerecorded_e: http_set_field( http_hdr, "Pragma: xPlayStrm=1" ); @@ -691,7 +686,7 @@ } static int -asf_http_parse_response(asf_http_streaming_ctrl_t *asf_http_ctrl, HTTP_header_t *http_hdr ) { +asf_http_parse_response(asf_http_networking_t *asf_http_ctrl, HTTP_header_t *http_hdr ) { char *content_type, *pragma; char features[64] = "\0"; size_t len; @@ -744,47 +739,46 @@ } while( comma_ptr!=NULL ); pragma = http_get_next_field( http_hdr ); } - asf_http_ctrl->streaming_type = asf_http_streaming_type( content_type, features, http_hdr ); + asf_http_ctrl->networking_type = asf_http_networking_type( content_type, features, http_hdr ); return 0; } -static int asf_http_streaming_start(libinput_t*libinput, stream_t *stream, int *demuxer_type ) { +static int asf_http_networking_start(net_fd_t* fd, networking_t *networking) { HTTP_header_t *http_hdr=NULL; - URL_t *url = stream->streaming_ctrl->url; - asf_http_streaming_ctrl_t *asf_http_ctrl; + URL_t *url = networking->url; + asf_http_networking_t *asf_http_ctrl; char buffer[BUFFER_SIZE]; int i, ret; - int fd = stream->fd; int done; int auth_retry = 0; - asf_http_ctrl = (asf_http_streaming_ctrl_t*)mp_malloc(sizeof(asf_http_streaming_ctrl_t)); + asf_http_ctrl = new(zeromem) asf_http_networking_t; if( asf_http_ctrl==NULL ) { MSG_FATAL("Memory allocation failed\n"); return -1; } - asf_http_ctrl->streaming_type = ASF_Unknown_e; + asf_http_ctrl->networking_type = ASF_Unknown_e; asf_http_ctrl->request = 1; asf_http_ctrl->audio_streams = asf_http_ctrl->video_streams = NULL; asf_http_ctrl->n_audio = asf_http_ctrl->n_video = 0; - stream->streaming_ctrl->data = (any_t*)asf_http_ctrl; + networking->data = (any_t*)asf_http_ctrl; do { done = 1; - if( fd>0 ) closesocket( fd ); + if( *fd>0 ) closesocket( *fd ); if( !strcasecmp( url->protocol, "http_proxy" ) ) { if( url->port==0 ) url->port = 8080; } else { if( url->port==0 ) url->port = 80; } - fd = tcp_connect2Server(libinput, url->hostname, url->port, 0); - if( fd<0 ) return fd; + *fd = tcp_connect2Server(networking->libinput, url->hostname, url->port, 0); + if( *fd<0 ) return 0; - http_hdr = asf_http_request( stream->streaming_ctrl ); + http_hdr = asf_http_request( networking ); MSG_DBG2("Request [%s]\n", http_hdr->buffer ); for(i=0; i < (int)http_hdr->buffer_size ; ) { - int r = send( fd, http_hdr->buffer+i, http_hdr->buffer_size-i, 0); + int r = send( *fd, http_hdr->buffer+i, http_hdr->buffer_size-i, 0); if(r <0) { MSG_ERR("Socket write error : %s\n",strerror(errno)); return -1; @@ -794,7 +788,7 @@ http_free( http_hdr ); http_hdr = http_new_header(); do { - i = recv( fd, buffer, BUFFER_SIZE, 0); + i = recv( *fd, buffer, BUFFER_SIZE, 0); if( i<=0 ) { perror("read"); http_free( http_hdr ); @@ -812,20 +806,20 @@ http_free( http_hdr ); return -1; } - switch( asf_http_ctrl->streaming_type ) { + switch( asf_http_ctrl->networking_type ) { case ASF_Live_e: case ASF_Prerecorded_e: case ASF_PlainText_e: if( http_hdr->body_size>0 ) { - if( streaming_bufferize( stream->streaming_ctrl, http_hdr->body, http_hdr->body_size )<0 ) { + if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { http_free( http_hdr ); return -1; } } if( asf_http_ctrl->request==1 ) { - if( asf_http_ctrl->streaming_type!=ASF_PlainText_e ) { + if( asf_http_ctrl->networking_type!=ASF_PlainText_e ) { // First request, we only got the ASF header. - ret = asf_streaming_parse_header(fd,stream->streaming_ctrl); + ret = asf_networking_parse_header(*fd,networking); if(ret < 0) return -1; if(asf_http_ctrl->n_audio == 0 && asf_http_ctrl->n_video == 0) { MSG_ERR("No stream found\n"); @@ -840,39 +834,39 @@ break; case ASF_Redirector_e: if( http_hdr->body_size>0 ) { - if( streaming_bufferize( stream->streaming_ctrl, http_hdr->body, http_hdr->body_size )<0 ) { + if( networking_bufferize( networking, http_hdr->body, http_hdr->body_size )<0 ) { http_free( http_hdr ); return -1; } } - stream->type |= STREAMTYPE_TEXT; +// type |= STREAMTYPE_TEXT; done = 1; break; case ASF_Authenticate_e: if( http_authenticate( http_hdr, url, &auth_retry)<0 ) return -1; - asf_http_ctrl->streaming_type = ASF_Unknown_e; + asf_http_ctrl->networking_type = ASF_Unknown_e; done = 0; break; case ASF_Unknown_e: default: - MSG_ERR("Unknown ASF streaming type\n"); - closesocket(fd); + MSG_ERR("Unknown ASF networking type\n"); + closesocket(*fd); http_free( http_hdr ); return -1; } // Check if we got a redirect. } while(!done); - stream->fd = fd; - if( asf_http_ctrl->streaming_type==ASF_PlainText_e || asf_http_ctrl->streaming_type==ASF_Redirector_e ) { - stream->streaming_ctrl->streaming_read = nop_streaming_read; - stream->streaming_ctrl->streaming_seek = nop_streaming_seek; + fd = fd; + if( asf_http_ctrl->networking_type==ASF_PlainText_e || asf_http_ctrl->networking_type==ASF_Redirector_e ) { + networking->networking_read = nop_networking_read; + networking->networking_seek = nop_networking_seek; } else { - stream->streaming_ctrl->streaming_read = asf_http_streaming_read; - stream->streaming_ctrl->streaming_seek = asf_http_streaming_seek; - stream->streaming_ctrl->buffering = 1; + networking->networking_read = asf_http_networking_read; + networking->networking_seek = asf_http_networking_seek; + networking->buffering = 1; } - stream->streaming_ctrl->status = streaming_playing_e; + networking->status = networking_playing_e; http_free( http_hdr ); return 0; Modified: mplayerxp/libmpstream/asf_streaming.h =================================================================== --- mplayerxp/libmpstream/asf_streaming.h 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/asf_streaming.h 2012-12-06 13:53:54 UTC (rev 513) @@ -2,7 +2,8 @@ #define __ASF_STEAMING_H_INCLUDED 1 #include "stream.h" -extern int asf_streaming_start(libinput_t* libinput, stream_t *stream, int *demuxer_type); -extern int asf_mmst_streaming_start(libinput_t* libinput,stream_t *stream); +typedef int net_fd_t; +extern int asf_networking_start(net_fd_t* fd, networking_t *networking); +extern int asf_mmst_networking_start(net_fd_t* fd, networking_t *networking); #endif Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -29,6 +29,7 @@ #include "mplayerxp.h" #include "stream_msg.h" +namespace mpxp { #define CPF_EMPTY 0x00000001UL #define CPF_EOF 0x80000000UL #define CPF_DONE 0x40000000UL /* special case for dvd packets to exclude them from sending again */ @@ -104,18 +105,18 @@ readpos=c->read_filepos; in_cache=(readpos>=START_FILEPOS(c)&&readpos<END_FILEPOS(c)); new_start = readpos - c->back_size; - if(new_start<c->stream->start_pos) new_start=c->stream->start_pos; + if(new_start<c->stream->start_pos()) new_start=c->stream->start_pos(); seek_eof=0; - if(!in_cache && c->stream->type&STREAMTYPE_SEEKABLE) { + if(!in_cache && c->stream->type()&STREAMTYPE_SEEKABLE) { /* seeking... */ MSG_DBG2("Out of boundaries... seeking to %lli {in_cache(%i) %lli<%lli>%lli} \n" ,new_start,in_cache,START_FILEPOS(c),readpos,END_FILEPOS(c)); if(c->stream->eof || c->eof) nc_stream_reset(c->stream); - c->stream->driver->seek(c->stream,new_start); - if(errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver->mrl,strerror(errno)); errno=0; } - if((c->packets[c->first].filepos=c->stream->driver->tell(c->stream))<0) seek_eof=1; + c->stream->driver->seek(new_start); + if(errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver_info->mrl,strerror(errno)); errno=0; } + if((c->packets[c->first].filepos=c->stream->driver->tell())<0) seek_eof=1; c->last=c->first; - if(c->packets[c->first].filepos < new_start-(off_t)c->stream->sector_size) + if(c->packets[c->first].filepos < new_start-(off_t)c->stream->sector_size()) MSG_WARN("CACHE2: found wrong offset after seeking %lli (wanted: %lli)\n",c->packets[c->first].filepos,new_start); MSG_DBG2("Seek done. new pos: %lli\n",START_FILEPOS(c)); } else { @@ -143,8 +144,8 @@ { CACHE2_PACKET_TLOCK(cidx); c->packets[cidx].sp.len=c->sector_size; - c->packets[cidx].filepos = c->stream->driver->tell(c->stream); - c->stream->driver->read(c->stream,&c->packets[cidx].sp); + c->packets[cidx].filepos = c->stream->driver->tell(); + c->stream->driver->read(&c->packets[cidx].sp); MSG_DBG2("CACHE2: read_packet at %lli (wanted %u got %u type %i)",c->packets[cidx].filepos,c->sector_size,c->packets[cidx].sp.len,c->packets[cidx].sp.type); if(mp_conf.verbose>1) if(c->packets[cidx].sp.len>8) { @@ -162,7 +163,7 @@ c->eof=1; c->packets[cidx].state&=~CPF_EMPTY; c->packets[cidx].state&=~CPF_DONE; - if(errno) { MSG_WARN("c2_fill_buffer(drv:%s) error: %s\n",c->stream->driver->mrl,strerror(errno)); errno=0; } + if(errno) { MSG_WARN("c2_fill_buffer(drv:%s) error: %s\n",c->stream->driver_info->mrl,strerror(errno)); errno=0; } CACHE2_PACKET_TUNLOCK(cidx); break; } @@ -267,10 +268,10 @@ } int stream_enable_cache(stream_t *stream,libinput_t* libinput,int size,int _min,int prefill){ - int ss=stream->sector_size>1?stream->sector_size:STREAM_BUFFER_SIZE; + int ss=stream->sector_size()>1?stream->sector_size():STREAM_BUFFER_SIZE; cache_vars_t* c; - if (!(stream->type&STREAMTYPE_SEEKABLE) && stream->fd < 0) { + if (!(stream->type()&STREAMTYPE_SEEKABLE) && stream->fd < 0) { // The stream has no 'fd' behind it, so is non-cacheable MSG_WARN("\rThis stream is non-cacheable\n"); return 1; @@ -282,7 +283,7 @@ if(!c) return 0; c->stream=stream; c->prefill=size*prefill; - c->read_filepos=stream->start_pos; + c->read_filepos=stream->start_pos(); unsigned rc; if((rc=xmp_register_thread(NULL,sig_cache2,cache2_routine,"cache2"))==UINT_MAX) return 0; @@ -292,7 +293,7 @@ START_FILEPOS(c),c->read_filepos,END_FILEPOS(c),_min,c->eof,ss); while((c->read_filepos<START_FILEPOS(c) || END_FILEPOS(c)-c->read_filepos<_min) && !c->eof && CP_NEXT(c,c->last)!=c->first){ - if(!(stream->type&STREAMTYPE_SEEKABLE)) + if(!(stream->type()&STREAMTYPE_SEEKABLE)) MSG_STATUS("\rCache fill: %5.2f%% (%d bytes) ", 100.0*(float)(END_FILEPOS(c)-c->read_filepos)/(float)(c->buffer_size), END_FILEPOS(c)-c->read_filepos); @@ -352,8 +353,8 @@ cidx=c->first; do{ c->packets[cidx].state|=CPF_EMPTY; cidx=CP_NEXT(c,cidx); }while(cidx!=c->first); c->last=c->first; - c->read_filepos=c->stream->start_pos; - c->stream->driver->seek(c->stream,c->read_filepos); + c->read_filepos=c->stream->start_pos(); + c->stream->driver->seek(c->read_filepos); } } @@ -364,7 +365,7 @@ while(c->in_fill) yield_timeslice(); CACHE2_LOCK(c); if(c->eof) c2_stream_reset(c); - C2_ASSERT(pos < c->stream->start_pos); + C2_ASSERT(pos < c->stream->start_pos()); c->read_filepos=pos; CACHE2_UNLOCK(c); c2_stream_fill_buffer(c); @@ -672,4 +673,4 @@ y=(y<<8)|stream_read_char(s); return y; } - +} // namespace mpxp Modified: mplayerxp/libmpstream/cdd.h =================================================================== --- mplayerxp/libmpstream/cdd.h 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/cdd.h 2012-12-06 13:53:54 UTC (rev 513) @@ -5,9 +5,8 @@ namespace mpxp { struct libinput_t; -} -typedef struct { + struct cddb_data_t { char cddb_hello[1024]; unsigned long disc_id; unsigned int tracks; @@ -20,13 +19,13 @@ size_t xmcd_file_size; any_t*user_data; libinput_t*libinput; -} cddb_data_t; + }; -typedef struct { + struct cd_toc_t { unsigned int min, sec, frame; -} cd_toc_t; + }; -typedef struct cd_track { + struct cd_track_t { char *name; unsigned int track_nb; unsigned int min; @@ -34,11 +33,11 @@ unsigned int msec; unsigned long frame_begin; unsigned long frame_length; - struct cd_track *prev; - struct cd_track *next; -} cd_track_t; + cd_track_t *prev; + cd_track_t *next; + }; -typedef struct { + struct cd_info_t { char *artist; char *album; char *genre; @@ -49,39 +48,42 @@ cd_track_t *first; cd_track_t *last; cd_track_t *current; -} cd_info_t; + }; -typedef struct my_track_s { + struct my_track_t { int play; lsn_t start_sector; lsn_t end_sector; -}my_track_t; + }; -struct cdda_priv : public Opaque { - public: - cdda_priv(); - virtual ~cdda_priv(); + struct cdda_priv : public Opaque { + public: + cdda_priv(); + virtual ~cdda_priv(); - cdrom_drive_t* cd; - my_track_t tracks[256]; /* hope that's enough */ - unsigned min; - unsigned sec; - unsigned msec; - lsn_t sector; - lsn_t start_sector; - lsn_t end_sector; -}; + cdrom_drive_t* cd; + my_track_t tracks[256]; /* hope that's enough */ + unsigned min; + unsigned sec; + unsigned msec; + lsn_t sector; + lsn_t start_sector; + lsn_t end_sector; + }; -cd_info_t* __FASTCALL__ cd_info_new(); -void __FASTCALL__ cd_info_free(cd_info_t *cd_info); -cd_track_t* __FASTCALL__ cd_info_add_track(cd_info_t *cd_info, char *track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length); -cd_track_t* __FASTCALL__ cd_info_get_track(cd_info_t *cd_info, unsigned int track_nb); + cd_info_t* __FASTCALL__ cd_info_new(); + void __FASTCALL__ cd_info_free(cd_info_t *cd_info); + cd_track_t* __FASTCALL__ cd_info_add_track(cd_info_t *cd_info, char *track_name, unsigned int track_nb, unsigned int min, unsigned int sec, unsigned int msec, unsigned long frame_begin, unsigned long frame_length); + cd_track_t* __FASTCALL__ cd_info_get_track(cd_info_t *cd_info, unsigned int track_nb); -MPXP_Rc __FASTCALL__ open_cdda(stream_t*,const char* dev,const char* track); -MPXP_Rc __FASTCALL__ open_cddb(stream_t*,const char* dev,const char* track); -int __FASTCALL__ read_cdda(const stream_t* s,char *buf,track_t* trackidx); -void __FASTCALL__ seek_cdda(stream_t* s,off_t pos,track_t *trackidx); -off_t __FASTCALL__ tell_cdda(const stream_t* s); -void __FASTCALL__ close_cdda(stream_t* s); -void cdda_register_options(m_config_t* cfg); + cdda_priv* __FASTCALL__ open_cdda(const char* dev,const char* track); + cdda_priv* __FASTCALL__ open_cddb(libinput_t*,const char* dev,const char* track); + int __FASTCALL__ read_cdda(cdda_priv* s,char *buf,track_t* trackidx); + void __FASTCALL__ seek_cdda(cdda_priv* s,off_t pos,track_t *trackidx); + off_t __FASTCALL__ tell_cdda(const cdda_priv* s); + void __FASTCALL__ close_cdda(cdda_priv*); + off_t __FASTCALL__ cdda_start(cdda_priv*); + off_t __FASTCALL__ cdda_size(cdda_priv*); + void cdda_register_options(m_config_t* cfg); +} // namespace mpxp #endif // __CDD_H__ Modified: mplayerxp/libmpstream/cdda.cpp =================================================================== --- mplayerxp/libmpstream/cdda.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/cdda.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -15,6 +15,7 @@ #include "cdd.h" #include "stream_msg.h" +namespace mpxp { static int speed = -1; static int search_overlap = -1; static int no_skip = 0; @@ -74,7 +75,7 @@ return rval; } -MPXP_Rc __FASTCALL__ open_cdda(stream_t *st,const char* dev,const char* arg) { +cdda_priv* __FASTCALL__ open_cdda(const char* dev,const char* arg) { unsigned cd_tracks; cdda_priv* priv; unsigned int audiolen=0; @@ -89,7 +90,7 @@ if(!priv->cd) { MSG_ERR("Can't open cdda device: %s\n",dev); delete priv; - return MPXP_False; + return NULL; } cdio_cddap_verbose_set(priv->cd, mp_conf.verbose?CDDA_MESSAGE_PRINTIT:CDDA_MESSAGE_FORGETIT, mp_conf.verbose?CDDA_MESSAGE_PRINTIT:CDDA_MESSAGE_FORGETIT); @@ -98,7 +99,7 @@ MSG_ERR("Can't open disc\n"); cdda_close(priv->cd); delete priv; - return MPXP_False; + return NULL; } cd_tracks=cdio_cddap_tracks(priv->cd); @@ -129,13 +130,12 @@ if(speed) cdio_cddap_speed_set(priv->cd,speed); priv->sector = priv->start_sector; - st->type = STREAMTYPE_SEEKABLE|STREAMTYPE_RAWAUDIO; - st->priv = priv; - st->start_pos = priv->start_sector*CDIO_CD_FRAMESIZE_RAW; - st->end_pos = priv->end_sector*CDIO_CD_FRAMESIZE_RAW; - return MPXP_Ok; + return priv; } +off_t __FASTCALL__ cdda_start(cdda_priv* priv) { return priv->start_sector*CDIO_CD_FRAMESIZE_RAW; } +off_t __FASTCALL__ cdda_size(cdda_priv* priv) { return priv->end_sector*CDIO_CD_FRAMESIZE_RAW; } + static lsn_t map_sector(cdda_priv*p,lsn_t sector,track_t *tr) { unsigned i,j; @@ -171,8 +171,7 @@ return 0; } -int __FASTCALL__ read_cdda(const stream_t* s,char *buf,track_t *tr) { - cdda_priv* p = static_cast<cdda_priv*>(s->priv); +int __FASTCALL__ read_cdda(cdda_priv* p,char *buf,track_t *tr) { track_t i=255; if(cdio_cddap_read(p->cd, buf, p->sector, 1)==0) { @@ -195,8 +194,7 @@ return CDIO_CD_FRAMESIZE_RAW; } -void __FASTCALL__ seek_cdda(stream_t* s,off_t pos,track_t *tr) { - cdda_priv* p = static_cast<cdda_priv*>(s->priv); +void __FASTCALL__ seek_cdda(cdda_priv* p,off_t pos,track_t *tr) { long sec; long seeked_track=0; track_t j=255; @@ -212,13 +210,11 @@ p->sector=seeked_track; } -off_t __FASTCALL__ tell_cdda(const stream_t* s) { - const cdda_priv* p = static_cast<const cdda_priv*>(s->priv); +off_t __FASTCALL__ tell_cdda(const cdda_priv* p) { return p->sector*CDIO_CD_FRAMESIZE_RAW; } -void __FASTCALL__ close_cdda(stream_t* s) { - cdda_priv* p = static_cast<cdda_priv*>(s->priv); +void __FASTCALL__ close_cdda(cdda_priv* p) { delete p; } @@ -226,5 +222,5 @@ cdda_priv::~cdda_priv() { cdio_cddap_close(cd); } - +} // namespace mpxp #endif Modified: mplayerxp/libmpstream/cddb.cpp =================================================================== --- mplayerxp/libmpstream/cddb.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/cddb.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -43,12 +43,13 @@ #include "stream.h" #include "libmpconf/cfgparser.h" - #include "cdd.h" #include "version.h" #include "network.h" #include "stream_msg.h" +namespace mpxp { + #define DEFAULT_FREEDB_SERVER "freedb.freedb.org" #define DEFAULT_CACHE_DIR "/.cddb/" @@ -780,19 +781,19 @@ return cd_info; } -MPXP_Rc __FASTCALL__ open_cddb(stream_t *stream,const char *dev, const char *track) { +cdda_priv* __FASTCALL__ open_cddb(libinput_t *libinput,const char *dev, const char *track) { cd_info_t *cd_info = NULL; char *xmcd_file = NULL; MPXP_Rc ret; - ret = cddb_resolve(stream->streaming_ctrl->libinput,&xmcd_file); + ret = cddb_resolve(libinput,&xmcd_file); if( ret==MPXP_False ) { cd_info = cddb_parse_xmcd(xmcd_file); delete xmcd_file; cd_info_debug( cd_info ); + return NULL; } - ret = open_cdda(stream, dev, track); - - return ret; + return open_cdda(dev, track); } +} // namespace mpxp #endif Modified: mplayerxp/libmpstream/mrl.cpp =================================================================== --- mplayerxp/libmpstream/mrl.cpp 2012-12-06 06:45:48 UTC (rev 512) +++ mplayerxp/libmpstream/mrl.cpp 2012-12-06 13:53:54 UTC (rev 513) @@ -12,7 +12,7 @@ #ifdef TEST_MRL #include <stdio.h> #endif - +namespace mpxp { const char *mrl_parse_line(const char *line,char **user,char **pass,char **ms,char **port) { unsigned ssize; @@ -180,3 +180,5 @@ if(value) delete value; return param; } +} // namespace mpxp + Modified: mplayerxp/libmpstream/mrl.h =================================================================== --- mpl... [truncated message content] |
From: <nic...@us...> - 2012-12-06 06:45:59
|
Revision: 512 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=512&view=rev Author: nickols_k Date: 2012-12-06 06:45:48 +0000 (Thu, 06 Dec 2012) Log Message: ----------- new idea Modified Paths: -------------- TODO Modified: TODO =================================================================== --- TODO 2012-12-05 11:42:31 UTC (rev 511) +++ TODO 2012-12-06 06:45:48 UTC (rev 512) @@ -1,7 +1,6 @@ TODO for mplayerxp: -- Move vo_data and ao_data into private of vf_vo and af_ao2 or into - MPXPCtx at least. +- Implement demux_rawstream.cpp specially for libmpstream/s_tv.cpp - Problem: it seems that demuxer doesn't differ bitmap-based subtitles from Closed Caption (plain ascii-text) ones. Because of this some demuxer's parser call video-driver directly to render subtitle on screen that breaks This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nic...@us...> - 2012-12-05 11:42:45
|
Revision: 511 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=511&view=rev Author: nickols_k Date: 2012-12-05 11:42:31 +0000 (Wed, 05 Dec 2012) Log Message: ----------- include input2 into namespace mpxp Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/dump.h mplayerxp/input2/input.cpp mplayerxp/input2/input.h mplayerxp/input2/joystick.cpp mplayerxp/input2/joystick.h mplayerxp/input2/lirc.cpp mplayerxp/input2/lirc.h mplayerxp/input2/mouse.h mplayerxp/libmpcodecs/dec_video.cpp mplayerxp/libmpcodecs/dec_video.h mplayerxp/libmpconf/cfgparser.cpp mplayerxp/libmpconf/cfgparser.h mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/mpdemux.cpp mplayerxp/libmpdemux/mpdemux.h mplayerxp/libmpstream/asf_mmst_streaming.cpp mplayerxp/libmpstream/asf_streaming.cpp mplayerxp/libmpstream/asf_streaming.h mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/cdd.h mplayerxp/libmpstream/cddb.cpp mplayerxp/libmpstream/network.cpp mplayerxp/libmpstream/network.h mplayerxp/libmpstream/s_cdd.cpp mplayerxp/libmpstream/s_dvdnav.cpp mplayerxp/libmpstream/s_dvdread.cpp mplayerxp/libmpstream/s_file.cpp mplayerxp/libmpstream/s_ftp.cpp mplayerxp/libmpstream/s_lavc.cpp mplayerxp/libmpstream/s_network.cpp mplayerxp/libmpstream/s_null.cpp mplayerxp/libmpstream/s_oss.cpp mplayerxp/libmpstream/s_rtsp.cpp mplayerxp/libmpstream/s_tv.cpp mplayerxp/libmpstream/s_udp.cpp mplayerxp/libmpstream/s_vcdnav.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/libmpstream/stream_internal.h mplayerxp/libmpstream/tcp.cpp mplayerxp/libmpstream/tcp.h mplayerxp/libplaytree/asxparser.cpp mplayerxp/libplaytree/asxparser.h mplayerxp/libplaytree/playtree.h mplayerxp/libplaytree/playtreeparser.cpp mplayerxp/libplaytree/playtreeparser.h mplayerxp/mp-opt-reg.cpp mplayerxp/mplayerxp.cpp mplayerxp/postproc/libmenu/menu.cpp mplayerxp/postproc/libmenu/menu.h mplayerxp/postproc/vf.cpp mplayerxp/postproc/vf.h mplayerxp/postproc/vf_internal.h mplayerxp/postproc/vf_menu.cpp Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/dump.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -89,7 +89,7 @@ uint64_t vsize,asize,ssize; float timer_corr; /* use common time-base */ float vtimer; - any_t* libinput; + libinput_t* libinput; }; void __FASTCALL__ dump_stream_event_handler(stream_t *s,const stream_packet_t*sp) @@ -119,7 +119,7 @@ return retval; } -void dump_mux_init(Demuxer *demuxer,any_t* libinput) +void dump_mux_init(Demuxer *demuxer,libinput_t* libinput) { sh_audio_t* sha=reinterpret_cast<sh_audio_t*>(demuxer->audio->sh); sh_video_t* shv=reinterpret_cast<sh_video_t*>(demuxer->video->sh); Modified: mplayerxp/dump.h =================================================================== --- mplayerxp/dump.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/dump.h 2012-12-05 11:42:31 UTC (rev 511) @@ -7,7 +7,7 @@ namespace mpxp { int dump_parse(const char *param); void dump_stream(stream_t *stream); - void dump_mux_init(Demuxer *demuxer,any_t*libinput); + void dump_mux_init(Demuxer *demuxer,libinput_t*libinput); void dump_mux(Demuxer *demuxer,int use_pts,const char *seek_to_sec,unsigned play_n_frames); void dump_mux_close(Demuxer *demuxer); void __FASTCALL__ dump_stream_event_handler(stream_t *s,const stream_packet_t*sp); Modified: mplayerxp/input2/input.cpp =================================================================== --- mplayerxp/input2/input.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/input.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -35,6 +35,8 @@ #include "joystick.h" #include "osdep/getch2.h" +namespace mpxp { + #ifndef MP_MAX_KEY_FD #define MP_MAX_KEY_FD 10 #endif @@ -56,18 +58,17 @@ typedef void (*mp_close_func_t)(any_t* ctx); // These are used to close the driver -typedef struct mp_cmd_bind { +struct mp_cmd_bind_t { int input[MP_MAX_KEY_DOWN+1]; const char* cmd; -} mp_cmd_bind_t; +}; -typedef struct mp_key_name { +struct mp_key_name_t { int key; const char* name; -} mp_key_name_t; +}; - -typedef struct mp_input_fd { +struct mp_input_fd_t { any_t* opaque; union { mp_key_func_t key_func; @@ -78,17 +79,15 @@ // This fields are for the cmd fds char* buffer; int pos,size; -} mp_input_fd_t; +}; -typedef struct mp_cmd_filter_st mp_cmd_filter_t; - -struct mp_cmd_filter_st { +struct mp_cmd_filter_t { mp_input_cmd_filter filter; any_t* ctx; mp_cmd_filter_t* next; }; -typedef struct priv_s { +struct libinput_t { char antiviral_hole[RND_CHAR1]; // These are the user defined binds mp_cmd_bind_t* cmd_binds; @@ -111,15 +110,15 @@ int in_file_fd; int tim; //for getch2 char key_str[12]; -}priv_t; +}; -typedef struct input_conf_s { +struct input_conf_t { int use_joystick,use_lirc,use_lircc; unsigned ar_delay,ar_rate; const char* js_dev; const char* in_file; int print_key_list,print_cmd_list; -}input_conf_t; +}; static input_conf_t libinput_conf = { 1, 1, 1, 100, 8, "/dev/input/js0", NULL, 0, 0 }; /// This array defines all know commands. @@ -423,8 +422,8 @@ void (*mp_input_key_cb)(int code) = NULL; static mp_cmd_t* mp_cmd_clone(mp_cmd_t* cmd); // This create a copy of a command (used by the auto repeat stuff) -static int mp_input_print_key_list(any_t*); -static int mp_input_print_cmd_list(any_t*); +static int mp_input_print_key_list(libinput_t*); +static int mp_input_print_cmd_list(libinput_t*); static const config_t joystick_conf[] = { { "on", &libinput_conf.use_joystick, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, "enables using of joystick" }, @@ -460,65 +459,65 @@ static int mp_input_default_key_func(any_t* fd); static int mp_input_default_cmd_func(any_t* fd,char* buf, int l); -static const char* mp_input_get_key_name(any_t*,int key); +static const char* mp_input_get_key_name(libinput_t*,int key); -static MPXP_Rc mp_input_add_cmd_fd(any_t* handle,any_t* opaque, int sel, mp_cmd_func_t read_func, mp_close_func_t close_func) { - priv_t* priv = (priv_t*)handle; - if(priv->num_cmd_fd == MP_MAX_CMD_FD) { +static MPXP_Rc mp_input_add_cmd_fd(libinput_t* handle,any_t* opaque, int sel, mp_cmd_func_t read_func, mp_close_func_t close_func) { + libinput_t& priv = *handle; + if(priv.num_cmd_fd == MP_MAX_CMD_FD) { MSG_ERR("Too much command fd, unable to register fd\n"); return MPXP_False; } - memset(&priv->cmd_fds[priv->num_cmd_fd],0,sizeof(mp_input_fd_t)); - priv->cmd_fds[priv->num_cmd_fd].opaque = opaque; - priv->cmd_fds[priv->num_cmd_fd].read.cmd_func = read_func ? read_func : mp_input_default_cmd_func; - priv->cmd_fds[priv->num_cmd_fd].close_func = close_func; - if(!sel) priv->cmd_fds[priv->num_cmd_fd].flags = MP_FD_NO_SELECT; - priv->num_cmd_fd++; + memset(&priv.cmd_fds[priv.num_cmd_fd],0,sizeof(mp_input_fd_t)); + priv.cmd_fds[priv.num_cmd_fd].opaque = opaque; + priv.cmd_fds[priv.num_cmd_fd].read.cmd_func = read_func ? read_func : mp_input_default_cmd_func; + priv.cmd_fds[priv.num_cmd_fd].close_func = close_func; + if(!sel) priv.cmd_fds[priv.num_cmd_fd].flags = MP_FD_NO_SELECT; + priv.num_cmd_fd++; return MPXP_Ok; } -static void mp_input_rm_cmd_fd(any_t* handle,any_t* fd) { - priv_t* priv = (priv_t*)handle; +static void mp_input_rm_cmd_fd(libinput_t* handle,any_t* fd) { + libinput_t& priv = *handle; unsigned int i; - for(i = 0; i < priv->num_cmd_fd; i++) { - if(priv->cmd_fds[i].opaque == fd) break; + for(i = 0; i < priv.num_cmd_fd; i++) { + if(priv.cmd_fds[i].opaque == fd) break; } - 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) 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--; + 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) 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--; } -static void mp_input_rm_key_fd(any_t* handle,any_t* fd) { - priv_t* priv = (priv_t*)handle; +static void mp_input_rm_key_fd(libinput_t* handle,any_t* fd) { + libinput_t& priv = *handle; unsigned int i; - for(i = 0; i < priv->num_key_fd; i++) { - if(priv->key_fds[i].opaque == fd) break; + for(i = 0; i < priv.num_key_fd; i++) { + if(priv.key_fds[i].opaque == fd) break; } - if(i == priv->num_key_fd) return; - if(priv->key_fds[i].close_func) priv->key_fds[i].close_func(priv->key_fds[i].opaque); - if(i + 1 < priv->num_key_fd) memmove(&priv->key_fds[i],&priv->key_fds[i+1],(priv->num_key_fd-i-1)*sizeof(mp_input_fd_t)); - priv->num_key_fd--; + if(i == priv.num_key_fd) return; + if(priv.key_fds[i].close_func) priv.key_fds[i].close_func(priv.key_fds[i].opaque); + if(i + 1 < priv.num_key_fd) memmove(&priv.key_fds[i],&priv.key_fds[i+1],(priv.num_key_fd-i-1)*sizeof(mp_input_fd_t)); + priv.num_key_fd--; } -static MPXP_Rc mp_input_add_key_fd(any_t* handle,any_t* opaque, int sel, mp_key_func_t read_func, mp_close_func_t close_func) { - priv_t* priv = (priv_t*)handle; - if(priv->num_key_fd == MP_MAX_KEY_FD) { +static MPXP_Rc mp_input_add_key_fd(libinput_t* handle,any_t* opaque, int sel, mp_key_func_t read_func, mp_close_func_t close_func) { + libinput_t& priv = *handle; + if(priv.num_key_fd == MP_MAX_KEY_FD) { MSG_ERR("Too much key fd, unable to register fd\n"); return MPXP_False; } - memset(&priv->key_fds[priv->num_key_fd],0,sizeof(mp_input_fd_t)); - priv->key_fds[priv->num_key_fd].opaque = opaque; - priv->key_fds[priv->num_key_fd].read.key_func = read_func ? read_func : mp_input_default_key_func; - priv->key_fds[priv->num_key_fd].close_func = close_func; - if(!sel) priv->key_fds[priv->num_key_fd].flags |= MP_FD_NO_SELECT; - priv->num_key_fd++; + memset(&priv.key_fds[priv.num_key_fd],0,sizeof(mp_input_fd_t)); + priv.key_fds[priv.num_key_fd].opaque = opaque; + priv.key_fds[priv.num_key_fd].read.key_func = read_func ? read_func : mp_input_default_key_func; + priv.key_fds[priv.num_key_fd].close_func = close_func; + if(!sel) priv.key_fds[priv.num_key_fd].flags |= MP_FD_NO_SELECT; + priv.num_key_fd++; return MPXP_Ok; } @@ -638,17 +637,17 @@ } static int mp_input_default_key_func(any_t* fd) { - priv_t* priv = (priv_t*)fd; + libinput_t& priv = *reinterpret_cast<libinput_t*>(fd); int r,code=0; unsigned int l; l = 0; - if(priv->in_file_fd == 0) { // stdin is handled by getch2 - code = getch2(priv->tim); + if(priv.in_file_fd == 0) { // stdin is handled by getch2 + code = getch2(priv.tim); if(code < 0) code = MP_INPUT_NOTHING; } else { - fcntl(priv->in_file_fd,F_SETFL,fcntl(priv->in_file_fd,F_GETFL)|O_NONBLOCK); + fcntl(priv.in_file_fd,F_SETFL,fcntl(priv.in_file_fd,F_GETFL)|O_NONBLOCK); while(l < sizeof(int)) { - r = read(priv->in_file_fd,(&code)+l,sizeof(int)-l); + r = read(priv.in_file_fd,(&code)+l,sizeof(int)-l); if(r <= 0) break; l +=r; } @@ -726,10 +725,10 @@ } static int mp_input_default_cmd_func(any_t* fd,char* buf, int l) { - priv_t* priv=(priv_t*)fd; - fcntl(priv->in_file_fd,F_SETFL,fcntl(priv->in_file_fd,F_GETFL)|O_NONBLOCK); + libinput_t& priv=*reinterpret_cast<libinput_t*>(fd); + fcntl(priv.in_file_fd,F_SETFL,fcntl(priv.in_file_fd,F_GETFL)|O_NONBLOCK); while(1) { - int r = read(priv->in_file_fd,buf,l); + int r = read(priv.in_file_fd,buf,l); // Error ? if(r < 0) { if(errno == EINTR) continue; @@ -741,15 +740,15 @@ } } -void mp_input_add_cmd_filter(any_t* handle,mp_input_cmd_filter func, any_t* ctx) { - priv_t* priv = (priv_t*)handle; +void mp_input_add_cmd_filter(libinput_t* handle,mp_input_cmd_filter func,any_t* ctx) { + libinput_t& priv = *handle; mp_cmd_filter_t* filter = new(zeromem) mp_cmd_filter_t; filter->filter = func; filter->ctx = ctx; - filter->next = priv->cmd_filters; - priv->cmd_filters = filter; - fill_false_pointers(priv->antiviral_hole,offsetof(priv_t,cmd_binds)-offsetof(priv_t,antiviral_hole)); + filter->next = priv.cmd_filters; + priv.cmd_filters = filter; + fill_false_pointers(priv.antiviral_hole,offsetof(libinput_t,cmd_binds)-offsetof(libinput_t,antiviral_hole)); } static const char* mp_input_find_bind_for_key(const mp_cmd_bind_t* binds, int n,int* keys) { @@ -773,76 +772,76 @@ return binds[j].cmd; } -mp_cmd_t* mp_input_get_cmd_from_keys(any_t* handle,int n,int* keys) { - priv_t* priv = (priv_t*)handle; +mp_cmd_t* mp_input_get_cmd_from_keys(libinput_t* handle,int n,int* keys) { + libinput_t& priv = *handle; const char* cmd = NULL; mp_cmd_t* ret; - if(priv->cmd_binds) cmd = mp_input_find_bind_for_key(priv->cmd_binds,n,keys); + if(priv.cmd_binds) cmd = mp_input_find_bind_for_key(priv.cmd_binds,n,keys); if(cmd == NULL) cmd = mp_input_find_bind_for_key(def_cmd_binds,n,keys); if(cmd == NULL) { - MSG_WARN("No bind found for key %s",mp_input_get_key_name(priv,keys[0])); + MSG_WARN("No bind found for key %s",mp_input_get_key_name(&priv,keys[0])); if(n > 1) { int s; - for(s=1; s < n; s++) MSG_WARN("-%s",mp_input_get_key_name(priv,keys[s])); + for(s=1; s < n; s++) MSG_WARN("-%s",mp_input_get_key_name(&priv,keys[s])); } MSG_WARN(" \n"); return NULL; } ret = mp_input_parse_cmd(cmd); if(!ret) { - MSG_ERR("Invalid command for binded key %s",mp_input_get_key_name(priv,priv->key_down[0])); - if(priv->num_key_down > 1) { + MSG_ERR("Invalid command for binded key %s",mp_input_get_key_name(&priv,priv.key_down[0])); + if(priv.num_key_down > 1) { unsigned int s; - for(s=1; s < priv->num_key_down; s++) MSG_ERR("-%s",mp_input_get_key_name(priv,priv->key_down[s])); + for(s=1; s < priv.num_key_down; s++) MSG_ERR("-%s",mp_input_get_key_name(&priv,priv.key_down[s])); } MSG_ERR(" : %s \n",cmd); } return ret; } -static int mp_input_read_key_code(any_t* handle,int tim) { - priv_t* priv = (priv_t*)handle; +static int mp_input_read_key_code(libinput_t* handle,int tim) { + libinput_t& priv = *handle; int n=0; unsigned i; - if(priv->num_key_fd == 0) return MP_INPUT_NOTHING; + if(priv.num_key_fd == 0) return MP_INPUT_NOTHING; // Remove fd marked as dead and build the fd_set // n == number of fd's to be select() checked - for(i = 0; (unsigned int)i < priv->num_key_fd; i++) { - if( (priv->key_fds[i].flags & MP_FD_DEAD) ) { - mp_input_rm_key_fd(priv,priv->key_fds[i].opaque); + for(i = 0; (unsigned int)i < priv.num_key_fd; i++) { + if( (priv.key_fds[i].flags & MP_FD_DEAD) ) { + mp_input_rm_key_fd(&priv,priv.key_fds[i].opaque); i--; continue; - } else if(priv->key_fds[i].flags & MP_FD_NO_SELECT) continue; + } else if(priv.key_fds[i].flags & MP_FD_NO_SELECT) continue; n++; } - if(priv->num_key_fd == 0) return MP_INPUT_NOTHING; - for(i = 0; i < priv->num_key_fd; i++) { + if(priv.num_key_fd == 0) return MP_INPUT_NOTHING; + for(i = 0; i < priv.num_key_fd; i++) { int code = -1; - priv->tim = tim; - code = ((mp_key_func_t)priv->key_fds[i].read.key_func)(priv->key_fds[i].opaque); + priv.tim = tim; + code = ((mp_key_func_t)priv.key_fds[i].read.key_func)(priv.key_fds[i].opaque); if(code >= 0) return code; if(code == MP_INPUT_ERROR) MSG_ERR("Error on key input fd\n"); else if(code == MP_INPUT_DEAD) { MSG_ERR("Dead key input on fd\n"); - mp_input_rm_key_fd(priv,priv->key_fds[i].opaque); + mp_input_rm_key_fd(&priv,priv.key_fds[i].opaque); } } return MP_INPUT_NOTHING; } -static mp_cmd_t* mp_input_read_keys(any_t*handle,int tim) { - priv_t* priv = (priv_t*)handle; - int code = mp_input_read_key_code(priv,tim); +static mp_cmd_t* mp_input_read_keys(libinput_t*handle,int tim) { + libinput_t& priv = *handle; + int code = mp_input_read_key_code(&priv,tim); unsigned int j; mp_cmd_t* ret; if(mp_input_key_cb) { - for( ; code >= 0 ; code = mp_input_read_key_code(priv,0) ) { + for( ; code >= 0 ; code = mp_input_read_key_code(&priv,0) ) { if(code & MP_KEY_DOWN) continue; code &= ~(MP_KEY_DOWN|MP_NO_REPEAT_KEY); mp_input_key_cb(code); @@ -850,103 +849,103 @@ return NULL; } - for( ; code >= 0 ; code = mp_input_read_key_code(priv,0) ) { + for( ; code >= 0 ; code = mp_input_read_key_code(&priv,0) ) { // key pushed if(code & MP_KEY_DOWN) { - if(priv->num_key_down > MP_MAX_KEY_DOWN) { + if(priv.num_key_down > MP_MAX_KEY_DOWN) { MSG_ERR("Too much key down at the same time\n"); continue; } code &= ~MP_KEY_DOWN; // Check if we don't already have this key as pushed - for(j = 0; j < priv->num_key_down; j++) { - if(priv->key_down[j] == code) + for(j = 0; j < priv.num_key_down; j++) { + if(priv.key_down[j] == code) break; } - if(j != priv->num_key_down) continue; - priv->key_down[priv->num_key_down] = code; - priv->num_key_down++; - priv->last_key_down = GetTimer(); - priv->ar_state = 0; + if(j != priv.num_key_down) continue; + priv.key_down[priv.num_key_down] = code; + priv.num_key_down++; + priv.last_key_down = GetTimer(); + priv.ar_state = 0; continue; } // key released // Check if the key is in the down key, driver which can't send push event // send only release event - for(j = 0; j < priv->num_key_down; j++) { - if(priv->key_down[j] == code) break; + for(j = 0; j < priv.num_key_down; j++) { + if(priv.key_down[j] == code) break; } - if(j == priv->num_key_down) { // key was not in the down keys : add it - if(priv->num_key_down > MP_MAX_KEY_DOWN) { + if(j == priv.num_key_down) { // key was not in the down keys : add it + if(priv.num_key_down > MP_MAX_KEY_DOWN) { MSG_ERR("Too much key down at the same time\n"); continue; } - priv->key_down[priv->num_key_down] = code; - priv->num_key_down++; - priv->last_key_down = 1; + priv.key_down[priv.num_key_down] = code; + priv.num_key_down++; + priv.last_key_down = 1; } // We ignore key from last combination - ret = priv->last_key_down ? mp_input_get_cmd_from_keys(priv,priv->num_key_down,priv->key_down):NULL; + ret = priv.last_key_down ? mp_input_get_cmd_from_keys(&priv,priv.num_key_down,priv.key_down):NULL; // Remove the key - if(j+1 < priv->num_key_down) memmove(&priv->key_down[j],&priv->key_down[j+1],(priv->num_key_down-(j+1))*sizeof(int)); - priv->num_key_down--; - priv->last_key_down = 0; - priv->ar_state = -1; - if(priv->ar_cmd) { - mp_cmd_free(priv->ar_cmd); - priv->ar_cmd = NULL; + if(j+1 < priv.num_key_down) memmove(&priv.key_down[j],&priv.key_down[j+1],(priv.num_key_down-(j+1))*sizeof(int)); + priv.num_key_down--; + priv.last_key_down = 0; + priv.ar_state = -1; + if(priv.ar_cmd) { + mp_cmd_free(priv.ar_cmd); + priv.ar_cmd = NULL; } if(ret) return ret; } // No input : autorepeat ? - if(libinput_conf.ar_rate > 0 && priv->ar_state >=0 && priv->num_key_down > 0 && !(priv->key_down[priv->num_key_down-1]&MP_NO_REPEAT_KEY)) { + if(libinput_conf.ar_rate > 0 && priv.ar_state >=0 && priv.num_key_down > 0 && !(priv.key_down[priv.num_key_down-1]&MP_NO_REPEAT_KEY)) { unsigned int t = GetTimer(); // First time : wait delay - if(priv->ar_state == 0 && (t - priv->last_key_down) >= libinput_conf.ar_delay*1000) { - priv->ar_cmd = mp_input_get_cmd_from_keys(priv,priv->num_key_down,priv->key_down); - if(!priv->ar_cmd) { - priv->ar_state = -1; + if(priv.ar_state == 0 && (t - priv.last_key_down) >= libinput_conf.ar_delay*1000) { + priv.ar_cmd = mp_input_get_cmd_from_keys(&priv,priv.num_key_down,priv.key_down); + if(!priv.ar_cmd) { + priv.ar_state = -1; return NULL; } - priv->ar_state = 1; - priv->last_ar = t; - return mp_cmd_clone(priv->ar_cmd); + priv.ar_state = 1; + priv.last_ar = t; + return mp_cmd_clone(priv.ar_cmd); // Then send rate / sec event - } else if(priv->ar_state == 1 && (t -priv->last_ar) >= 1000000/libinput_conf.ar_rate) { - priv->last_ar = t; - return mp_cmd_clone(priv->ar_cmd); + } else if(priv.ar_state == 1 && (t -priv.last_ar) >= 1000000/libinput_conf.ar_rate) { + priv.last_ar = t; + return mp_cmd_clone(priv.ar_cmd); } } return NULL; } -static mp_cmd_t* mp_input_read_cmds(any_t* handle) { - priv_t* priv = (priv_t*)handle; +static mp_cmd_t* mp_input_read_cmds(libinput_t* handle) { + libinput_t& priv = *handle; int n = 0,got_cmd = 0; unsigned i; mp_cmd_t* ret; static int last_loop = 0; - if(priv->num_cmd_fd == 0) return NULL; + if(priv.num_cmd_fd == 0) return NULL; - for(i = 0; (unsigned int)i < priv->num_cmd_fd ; i++) { - if(priv->cmd_fds[i].flags&MP_FD_EOF) { - mp_input_rm_cmd_fd(priv,priv->cmd_fds[i].opaque); + for(i = 0; (unsigned int)i < priv.num_cmd_fd ; i++) { + if(priv.cmd_fds[i].flags&MP_FD_EOF) { + mp_input_rm_cmd_fd(&priv,priv.cmd_fds[i].opaque); i--; continue; - } else if(priv->cmd_fds[i].flags & MP_FD_NO_SELECT) continue; - if(priv->cmd_fds[i].flags & MP_FD_GOT_CMD) got_cmd = 1; + } else if(priv.cmd_fds[i].flags & MP_FD_NO_SELECT) continue; + if(priv.cmd_fds[i].flags & MP_FD_GOT_CMD) got_cmd = 1; n++; } - if(priv->num_cmd_fd == 0) return NULL; - for(i = 0; i < priv->num_cmd_fd; i++) { + if(priv.num_cmd_fd == 0) return NULL; + for(i = 0; i < priv.num_cmd_fd; i++) { int r = 0; char* cmd; - r = mp_input_read_cmd(&priv->cmd_fds[i],&cmd); + r = mp_input_read_cmd(&priv.cmd_fds[i],&cmd); if(r < 0) { if(r == MP_INPUT_ERROR) MSG_ERR("Error on cmd fd\n"); - else if(r == MP_INPUT_DEAD) priv->cmd_fds[i].flags |= MP_FD_DEAD; + else if(r == MP_INPUT_DEAD) priv.cmd_fds[i].flags |= MP_FD_DEAD; continue; } ret = mp_input_parse_cmd(cmd); @@ -959,26 +958,26 @@ return NULL; } -MPXP_Rc mp_input_queue_cmd(any_t* handle,mp_cmd_t* cmd) { - priv_t* priv = (priv_t*)handle; - if(priv->cmd_queue_length >= CMD_QUEUE_SIZE) return MPXP_False; - priv->cmd_queue[priv->cmd_queue_end] = cmd; - priv->cmd_queue_end = (priv->cmd_queue_end + 1) % CMD_QUEUE_SIZE; - priv->cmd_queue_length++; +MPXP_Rc mp_input_queue_cmd(libinput_t* handle,mp_cmd_t* cmd) { + libinput_t& priv = *handle; + if(priv.cmd_queue_length >= CMD_QUEUE_SIZE) return MPXP_False; + priv.cmd_queue[priv.cmd_queue_end] = cmd; + priv.cmd_queue_end = (priv.cmd_queue_end + 1) % CMD_QUEUE_SIZE; + priv.cmd_queue_length++; return MPXP_Ok; } -static mp_cmd_t* mp_input_get_queued_cmd(any_t* handle,int peek_only) { - priv_t* priv = (priv_t*)handle; +static mp_cmd_t* mp_input_get_queued_cmd(libinput_t* handle,int peek_only) { + libinput_t& priv = *handle; mp_cmd_t* ret; - if(priv->cmd_queue_length == 0) return NULL; + if(priv.cmd_queue_length == 0) return NULL; - ret = priv->cmd_queue[priv->cmd_queue_start]; + ret = priv.cmd_queue[priv.cmd_queue_start]; if (!peek_only) { - priv->cmd_queue_length--; - priv->cmd_queue_start = (priv->cmd_queue_start + 1) % CMD_QUEUE_SIZE; + priv.cmd_queue_length--; + priv.cmd_queue_start = (priv.cmd_queue_start + 1) % CMD_QUEUE_SIZE; } return ret; } @@ -987,26 +986,26 @@ * \param peek_only when set, the returned command stays in the queue. * Do not mp_free the returned cmd whe you set this! */ -mp_cmd_t* mp_input_get_cmd(any_t*handle,int tim, int paused, int peek_only) { - priv_t* priv = (priv_t*)handle; +mp_cmd_t* mp_input_get_cmd(libinput_t*handle,int tim, int paused, int peek_only) { + libinput_t& priv = *handle; mp_cmd_t* ret = NULL; mp_cmd_filter_t* cf; int from_queue; from_queue = 1; - ret = mp_input_get_queued_cmd(priv,peek_only); + ret = mp_input_get_queued_cmd(&priv,peek_only); if(!ret) { from_queue = 0; - ret = mp_input_read_keys(priv,tim); - if(!ret) ret = mp_input_read_cmds(priv); + ret = mp_input_read_keys(&priv,tim); + if(!ret) ret = mp_input_read_cmds(&priv); } if(!ret) return NULL; - for(cf = priv->cmd_filters ; cf ; cf = cf->next) { + for(cf = priv.cmd_filters ; cf ; cf = cf->next) { if(cf->filter(ret,paused,cf->ctx)) return NULL; } - if (!from_queue && peek_only) mp_input_queue_cmd(priv,ret); + if (!from_queue && peek_only) mp_input_queue_cmd(&priv,ret); return ret; } @@ -1044,8 +1043,8 @@ return ret; } -static const char* mp_input_get_key_name(any_t* handle,int key) { - priv_t* priv = (priv_t*)handle; +static const char* mp_input_get_key_name(libinput_t* handle,int key) { + libinput_t& priv = *handle; unsigned i; for(i = 0; key_names[i].name != NULL; i++) { @@ -1053,13 +1052,13 @@ } if(isascii(key)) { - snprintf(priv->key_str,12,"%c",(char)key); - return priv->key_str; + snprintf(priv.key_str,12,"%c",(char)key); + return priv.key_str; } // Print the hex key code - snprintf(priv->key_str,12,"%#-8x",key); - return priv->key_str; + snprintf(priv.key_str,12,"%#-8x",key); + return priv.key_str; } static int mp_input_get_key_from_name(char* name) { @@ -1097,8 +1096,8 @@ return 1; } -static void mp_input_bind_keys(any_t* handle,int keys[MP_MAX_KEY_DOWN+1], char* cmd) { - priv_t* priv = (priv_t*)handle; +static void mp_input_bind_keys(libinput_t* handle,int keys[MP_MAX_KEY_DOWN+1], char* cmd) { + libinput_t& priv = *handle; int i = 0,j; mp_cmd_bind_t* _bind = NULL; @@ -1107,20 +1106,20 @@ assert(cmd != NULL); #endif - if(priv->cmd_binds) { - for(i = 0; priv->cmd_binds[i].cmd != NULL ; i++) { - for(j = 0 ; priv->cmd_binds[i].input[j] == keys[j] && keys[j] != 0 ; j++) /* NOTHING */; - if(keys[j] == 0 && priv->cmd_binds[i].input[j] == 0 ) { - _bind = &priv->cmd_binds[i]; + if(priv.cmd_binds) { + for(i = 0; priv.cmd_binds[i].cmd != NULL ; i++) { + for(j = 0 ; priv.cmd_binds[i].input[j] == keys[j] && keys[j] != 0 ; j++) /* NOTHING */; + if(keys[j] == 0 && priv.cmd_binds[i].input[j] == 0 ) { + _bind = &priv.cmd_binds[i]; break; } } } if(!_bind) { - priv->cmd_binds = (mp_cmd_bind_t*)mp_realloc(priv->cmd_binds,(i+2)*sizeof(mp_cmd_bind_t)); - memset(&priv->cmd_binds[i],0,2*sizeof(mp_cmd_bind_t)); - _bind = &priv->cmd_binds[i]; + priv.cmd_binds = (mp_cmd_bind_t*)mp_realloc(priv.cmd_binds,(i+2)*sizeof(mp_cmd_bind_t)); + memset(&priv.cmd_binds[i],0,2*sizeof(mp_cmd_bind_t)); + _bind = &priv.cmd_binds[i]; } if(_bind->cmd) delete _bind->cmd; _bind->cmd = mp_strdup(cmd); @@ -1137,8 +1136,8 @@ #define BS_MAX 256 #define SPACE_CHAR " \n\r\t" -static int mp_input_parse_config(any_t* handle,const char *file) { - priv_t* priv = (priv_t*)handle; +static int mp_input_parse_config(libinput_t* handle,const char *file) { + libinput_t& priv = *handle; int fd; int bs = 0,r,eof = 0,comments = 0; char *iter,*end; @@ -1175,7 +1174,7 @@ // Empty buffer : return if(bs <= 1) { MSG_INFO("Input config file %s parsed : %d binds\n",file,n_binds); - if(binds) priv->cmd_binds = binds; + if(binds) priv.cmd_binds = binds; close(fd); return 1; } @@ -1235,8 +1234,8 @@ // Found new line if(iter[0] == '\n' || iter[0] == '\r') { int i; - MSG_ERR("No command found for key %s" ,mp_input_get_key_name(priv,keys[0])); - for(i = 1; keys[i] != 0 ; i++) MSG_ERR("-%s",mp_input_get_key_name(priv,keys[i])); + MSG_ERR("No command found for key %s" ,mp_input_get_key_name(&priv,keys[0])); + for(i = 1; keys[i] != 0 ; i++) MSG_ERR("-%s",mp_input_get_key_name(&priv,keys[i])); MSG_ERR("\n"); keys[0] = 0; if(iter > buffer) { @@ -1261,7 +1260,7 @@ strncpy(cmd,iter,end-iter); cmd[end-iter] = '\0'; //printf("Set bind %d => %s\n",keys[0],cmd); - mp_input_bind_keys(priv,keys,cmd); + mp_input_bind_keys(&priv,keys,cmd); n_binds++; keys[0] = 0; end++; @@ -1276,8 +1275,8 @@ return 0; } -static void mp_input_init(any_t* handle) { - priv_t* priv = (priv_t*)handle; +static void mp_input_init(libinput_t* handle) { + libinput_t& priv = *handle; const char* file; file = config_file[0] != '/' ? get_path(config_file) : config_file; @@ -1293,14 +1292,14 @@ any_t* joystick_fd; joystick_fd = mp_input_joystick_open(libinput_conf.js_dev); if(!joystick_fd) MSG_ERR("Can't init input joystick with using: %s\n",libinput_conf.js_dev); - else mp_input_add_key_fd(priv,joystick_fd,1,mp_input_joystick_read,(mp_close_func_t)mp_input_joystick_close); + else mp_input_add_key_fd(&priv,joystick_fd,1,mp_input_joystick_read,(mp_close_func_t)mp_input_joystick_close); } #endif #ifdef HAVE_LIRC if(libinput_conf.use_lirc) { any_t* lirc_fd = mp_input_lirc_open(); - if(lirc_fd) mp_input_add_cmd_fd(priv,lirc_fd,0,mp_input_lirc_read_cmd,mp_input_lirc_close); + if(lirc_fd) mp_input_add_cmd_fd(&priv,lirc_fd,0,mp_input_lirc_read_cmd,mp_input_lirc_close); } #endif @@ -1314,41 +1313,41 @@ struct stat st; if(stat(libinput_conf.in_file,&st)) MSG_ERR("Can't stat %s: %s\n",libinput_conf.in_file,strerror(errno)); else { - priv->in_file_fd = open(libinput_conf.in_file,(S_ISFIFO(st.st_mode)?O_RDWR:O_RDONLY)|O_NONBLOCK); - if(priv->in_file_fd >= 0) mp_input_add_cmd_fd(priv,priv,1,NULL,(mp_close_func_t)close); + priv.in_file_fd = open(libinput_conf.in_file,(S_ISFIFO(st.st_mode)?O_RDWR:O_RDONLY)|O_NONBLOCK); + if(priv.in_file_fd >= 0) mp_input_add_cmd_fd(&priv,&priv,1,NULL,(mp_close_func_t)close); else MSG_ERR("Can't open %s: %s\n",libinput_conf.in_file,strerror(errno)); } } - priv->in_file_fd = 0; + priv.in_file_fd = 0; getch2_enable(); // prepare stdin for hotkeys... - mp_input_add_key_fd(priv,priv,1,NULL,(mp_close_func_t)close); + mp_input_add_key_fd(&priv,&priv,1,NULL,(mp_close_func_t)close); } -static void mp_input_uninit(any_t* handle) { - priv_t* priv = (priv_t*)handle; +static void mp_input_uninit(libinput_t* handle) { + libinput_t& priv = *handle; unsigned int i; - for(i=0; i < priv->num_key_fd; i++) { - if(priv->key_fds[i].close_func) priv->key_fds[i].close_func(priv->key_fds[i].opaque); + for(i=0; i < priv.num_key_fd; i++) { + if(priv.key_fds[i].close_func) priv.key_fds[i].close_func(priv.key_fds[i].opaque); } - for(i=0; i < priv->num_cmd_fd; i++) { - if(priv->cmd_fds[i].close_func) priv->cmd_fds[i].close_func(priv->cmd_fds[i].opaque); + for(i=0; i < priv.num_cmd_fd; i++) { + if(priv.cmd_fds[i].close_func) priv.cmd_fds[i].close_func(priv.cmd_fds[i].opaque); } - if(priv->cmd_binds) { + if(priv.cmd_binds) { for(i=0;;i++) { - if(priv->cmd_binds[i].cmd != NULL) delete priv->cmd_binds[i].cmd; + if(priv.cmd_binds[i].cmd != NULL) delete priv.cmd_binds[i].cmd; else break; } - delete priv->cmd_binds; - priv->cmd_binds=NULL; + delete priv.cmd_binds; + priv.cmd_binds=NULL; } - if(priv->in_file_fd==0) getch2_disable(); + if(priv.in_file_fd==0) getch2_disable(); } -any_t* mp_input_open(void) { - priv_t* priv=new(zeromem) priv_t; +libinput_t* mp_input_open(void) { + libinput_t* priv=new(zeromem) libinput_t; priv->ar_state=-1; priv->in_file_fd=-1; mp_input_init(priv); @@ -1357,7 +1356,7 @@ return priv; } -void mp_input_close(any_t* handle) { +void mp_input_close(libinput_t* handle) { mp_input_uninit(handle); delete handle; } @@ -1366,19 +1365,19 @@ m_config_register_options(cfg,mp_input_opts); } -void mp_input_print_keys(any_t*handle) { +void mp_input_print_keys(libinput_t*handle) { unsigned i; UNUSED(handle); MSG_INFO("List of available KEYS:\n"); for(i= 0; key_names[i].name != NULL ; i++) MSG_INFO("%s\n",key_names[i].name); } -static int mp_input_print_key_list(any_t*handle) { +static int mp_input_print_key_list(libinput_t*handle) { mp_input_print_keys(handle); exit(0); } -void mp_input_print_binds(any_t*handle) { +void mp_input_print_binds(libinput_t*handle) { unsigned i,j; MSG_INFO("List of available key bindings:\n"); for(i=0; def_cmd_binds[i].cmd != NULL ; i++) { @@ -1389,7 +1388,7 @@ } } -void mp_input_print_cmds(any_t*handle) { +void mp_input_print_cmds(libinput_t*handle) { const mp_cmd_t *cmd; int i,j; const char* type; @@ -1419,13 +1418,13 @@ } } -static int mp_input_print_cmd_list(any_t*handle) { +static int mp_input_print_cmd_list(libinput_t*handle) { mp_input_print_cmds(handle); exit(0); } -MPXP_Rc mp_input_check_interrupt(any_t* handle,int tim) { - priv_t* priv = (priv_t*)handle; +MPXP_Rc mp_input_check_interrupt(libinput_t* handle,int tim) { + libinput_t* priv = (libinput_t*)handle; mp_cmd_t* cmd; if((cmd = mp_input_get_cmd(handle,tim,0,1)) == NULL) return MPXP_False; switch(cmd->id) { @@ -1442,3 +1441,5 @@ mp_cmd_free(cmd); return MPXP_False; } + +} // namespace mpxp Modified: mplayerxp/input2/input.h =================================================================== --- mplayerxp/input2/input.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/input.h 2012-12-05 11:42:31 UTC (rev 511) @@ -1,161 +1,168 @@ #ifndef INPUT_H_INCLUDED #define INPUT_H_INCLUDED 1 #include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; + #include "xmpcore/xmp_enums.h" -// All commands id -enum { - MP_CMD_SEEK =0, - MP_CMD_RESERVED_0 =1, - MP_CMD_QUIT =2, - MP_CMD_PAUSE =3, - MP_CMD_SOFT_QUIT =4, - MP_CMD_PLAY_TREE_STEP =5, - MP_CMD_PLAY_TREE_UP_STEP =6, - MP_CMD_PLAY_ALT_SRC_STEP =7, - MP_CMD_RESERVED_1 =8, - MP_CMD_OSD =9, - MP_CMD_VOLUME =10, - MP_CMD_RESERVED_2 =11, - MP_CMD_CONTRAST =12, - MP_CMD_BRIGHTNESS =13, - MP_CMD_HUE =14, - MP_CMD_SATURATION =15, - MP_CMD_FRAMEDROPPING =16, - MP_CMD_TV_STEP_CHANNEL =17, - MP_CMD_TV_STEP_NORM =18, - MP_CMD_TV_STEP_CHANNEL_LIST =19, - MP_CMD_VO_FULLSCREEN =20, - MP_CMD_SUB_POS =21, - MP_CMD_DVDNAV =22, - MP_CMD_VO_SCREENSHOT =23, - MP_CMD_PANSCAN =24, - MP_CMD_MUTE =25, - MP_CMD_LOADFILE =26, - MP_CMD_LOADLIST =27, - MP_CMD_VF_CHANGE_RECTANGLE =28, - MP_CMD_GAMMA =29, - MP_CMD_SUB_VISIBILITY =30, - MP_CMD_VOBSUB_LANG =31, - MP_CMD_MENU =32, - MP_CMD_SET_MENU =33, - MP_CMD_GET_TIME_LENGTH =34, - MP_CMD_GET_PERCENT_POS =35, - MP_CMD_SUB_STEP =36, - MP_CMD_TV_SET_CHANNEL =37, +namespace mpxp { + // All commands id + enum { + MP_CMD_SEEK =0, + MP_CMD_RESERVED_0 =1, + MP_CMD_QUIT =2, + MP_CMD_PAUSE =3, + MP_CMD_SOFT_QUIT =4, + MP_CMD_PLAY_TREE_STEP =5, + MP_CMD_PLAY_TREE_UP_STEP=6, + MP_CMD_PLAY_ALT_SRC_STEP=7, + MP_CMD_RESERVED_1 =8, + MP_CMD_OSD =9, + MP_CMD_VOLUME =10, + MP_CMD_RESERVED_2 =11, + MP_CMD_CONTRAST =12, + MP_CMD_BRIGHTNESS =13, + MP_CMD_HUE =14, + MP_CMD_SATURATION =15, + MP_CMD_FRAMEDROPPING =16, + MP_CMD_TV_STEP_CHANNEL =17, + MP_CMD_TV_STEP_NORM =18, + MP_CMD_TV_STEP_CHANNEL_LIST=19, + MP_CMD_VO_FULLSCREEN =20, + MP_CMD_SUB_POS =21, + MP_CMD_DVDNAV =22, + MP_CMD_VO_SCREENSHOT =23, + MP_CMD_PANSCAN =24, + MP_CMD_MUTE =25, + MP_CMD_LOADFILE =26, + MP_CMD_LOADLIST =27, + MP_CMD_VF_CHANGE_RECTANGLE=28, + MP_CMD_GAMMA =29, + MP_CMD_SUB_VISIBILITY =30, + MP_CMD_VOBSUB_LANG =31, + MP_CMD_MENU =32, + MP_CMD_SET_MENU =33, + MP_CMD_GET_TIME_LENGTH =34, + MP_CMD_GET_PERCENT_POS =35, + MP_CMD_SUB_STEP =36, + MP_CMD_TV_SET_CHANNEL =37, #ifdef USE_EDL - MP_CMD_EDL_MARK =38, + MP_CMD_EDL_MARK =38, #endif - MP_CMD_SUB_ALIGNMENT =39, - MP_CMD_TV_LAST_CHANNEL =40, - MP_CMD_OSD_SHOW_TEXT =41, - MP_CMD_TV_STEP_CHANNEL_UP =42, - MP_CMD_TV_STEP_CHANNEL_DOWN =43, + MP_CMD_SUB_ALIGNMENT =39, + MP_CMD_TV_LAST_CHANNEL =40, + MP_CMD_OSD_SHOW_TEXT =41, + MP_CMD_TV_STEP_CHANNEL_UP=42, + MP_CMD_TV_STEP_CHANNEL_DOWN=43, - MP_CMD_SPEED_INCR =44, - MP_CMD_SPEED_MULT =45, - MP_CMD_SPEED_SET =46, + MP_CMD_SPEED_INCR =44, + MP_CMD_SPEED_MULT =45, + MP_CMD_SPEED_SET =46, - MP_CMD_SWITCH_AUDIO =47, - MP_CMD_SWITCH_VIDEO =48, - MP_CMD_SWITCH_SUB =49, + MP_CMD_SWITCH_AUDIO =47, + MP_CMD_SWITCH_VIDEO =48, + MP_CMD_SWITCH_SUB =49, - MP_CMD_FRAME_STEP =56, + MP_CMD_FRAME_STEP =56, - MP_CMD_DVDNAV_EVENT =6000, + MP_CMD_DVDNAV_EVENT =6000, /// Console command - MP_CMD_CHELP =7000, - MP_CMD_CEXIT =7001, - MP_CMD_CHIDE =7002, - MP_CMD_CRUN =7003 -}; + MP_CMD_CHELP =7000, + MP_CMD_CEXIT =7001, + MP_CMD_CHIDE =7002, + MP_CMD_CRUN =7003 + }; -enum { - MP_CMD_DVDNAV_UP =1, - MP_CMD_DVDNAV_DOWN =2, - MP_CMD_DVDNAV_LEFT =3, - MP_CMD_DVDNAV_RIGHT =4, - MP_CMD_DVDNAV_MENU =5, - MP_CMD_DVDNAV_SELECT=6, -}; -enum { + enum { + MP_CMD_DVDNAV_UP =1, + MP_CMD_DVDNAV_DOWN =2, + MP_CMD_DVDNAV_LEFT =3, + MP_CMD_DVDNAV_RIGHT =4, + MP_CMD_DVDNAV_MENU =5, + MP_CMD_DVDNAV_SELECT =6, + }; + enum { // The args types - MP_CMD_ARG_INT =0, - MP_CMD_ARG_FLOAT =1, - MP_CMD_ARG_STRING =2, - MP_CMD_ARG_VOID =3, + MP_CMD_ARG_INT =0, + MP_CMD_ARG_FLOAT=1, + MP_CMD_ARG_STRING=2, + MP_CMD_ARG_VOID =3, - MP_CMD_MAX_ARGS =10 -}; + MP_CMD_MAX_ARGS =10 + }; // Error codes for the drivers -enum { - MP_INPUT_ERROR =-1,// An error occured but we can continue - MP_INPUT_DEAD =-2,// A fatal error occured, this driver should be removed - MP_INPUT_NOTHING =-3 // No input were avaible -}; + enum { + MP_INPUT_ERROR =-1,// An error occured but we can continue + MP_INPUT_DEAD =-2,// A fatal error occured, this driver should be removed + MP_INPUT_NOTHING =-3 // No input were avaible + }; // For the keys drivers, if possible you can send key up and key down // events. Key up is the default, to send a key down you must or the key // code with MP_KEY_DOWN -enum { - MP_KEY_DOWN =(1<<29), - MP_NO_REPEAT_KEY =(1<<28), // Use this when the key shouldn't be auto-repeated (like mouse buttons) - MP_MAX_KEY_DOWN =32 -}; + enum { + MP_KEY_DOWN =(1<<29), + MP_NO_REPEAT_KEY =(1<<28), // Use this when the key shouldn't be auto-repeated (like mouse buttons) + MP_MAX_KEY_DOWN =32 + }; -typedef union mp_cmd_arg_value { - int i; - float f; - char* s; - any_t* v; -} mp_cmd_arg_value_t; + union mp_cmd_arg_value_t { + int i; + float f; + char* s; + any_t* v; + }; -typedef struct mp_cmd_arg { - int type; - mp_cmd_arg_value_t v; -} mp_cmd_arg_t; + struct mp_cmd_arg_t { + int type; + mp_cmd_arg_value_t v; + }; -typedef struct mp_cmd { - int id; - const char* name; - int nargs; - mp_cmd_arg_t args[MP_CMD_MAX_ARGS]; -} mp_cmd_t; + struct mp_cmd_t { + int id; + const char* name; + int nargs; + mp_cmd_arg_t args[MP_CMD_MAX_ARGS]; + }; -// These typedefs are for the drivers. They are the functions used to retrive -// the next key code or command. + struct libinput_t; -typedef int (*mp_input_cmd_filter)(mp_cmd_t* cmd, int paused, any_t* ctx); // Should return 1 if the command was processed -extern void (*mp_input_key_cb)(int code); // Set this to grab all incoming key code + // These typedefs are for the drivers. They are the functions used to retrive + // the next key code or command. -extern mp_cmd_t* mp_input_get_cmd_from_keys(any_t* handle,int n,int* keys); -// This function can be used to reput a command in the system. It's used by libmpdemux -// when it perform a blocking operation to resend the command it received to the main -// loop. -extern MPXP_Rc mp_input_queue_cmd(any_t* handle,mp_cmd_t* cmd); + typedef int (*mp_input_cmd_filter)(mp_cmd_t* cmd, int paused, any_t* ctx); // Should return 1 if the command was processed + extern void (*mp_input_key_cb)(int code); // Set this to grab all incoming key code -// This function retrive the next avaible command waiting no more than time msec. -// If pause is true, the next input will always return a pause command. -extern mp_cmd_t* mp_input_get_cmd(any_t*handle,int time, int paused, int peek_only); + extern mp_cmd_t* mp_input_get_cmd_from_keys(libinput_t* handle,int n,int* keys); + // This function can be used to reput a command in the system. It's used by libmpdemux + // when it perform a blocking operation to resend the command it received to the main + // loop. + extern MPXP_Rc mp_input_queue_cmd(libinput_t* handle,mp_cmd_t* cmd); -extern mp_cmd_t* mp_input_parse_cmd(const char* str); + // This function retrive the next avaible command waiting no more than time msec. + // If pause is true, the next input will always return a pause command. + extern mp_cmd_t* mp_input_get_cmd(libinput_t*handle,int time, int paused, int peek_only); -/// These filter allow you to process the command before mplayer -/// If a filter return a true value mp_input_get_cmd will return NULL -extern void mp_input_add_cmd_filter(any_t* handle,mp_input_cmd_filter, any_t* ctx); -// After getting a command from mp_input_get_cmd you need to mp_free it using this -// function -extern void mp_cmd_free(mp_cmd_t* cmd); + extern mp_cmd_t* mp_input_parse_cmd(const char* str); -// When you create a new driver you should add it in this 2 functions. -extern any_t* mp_input_open(void); -extern void mp_input_close(any_t* handle); + /// These filter allow you to process the command before mplayer + /// If a filter return a true value mp_input_get_cmd will return NULL + extern void mp_input_add_cmd_filter(libinput_t* handle,mp_input_cmd_filter, any_t* ctx); + // After getting a command from mp_input_get_cmd you need to mp_free it using this + // function + extern void mp_cmd_free(mp_cmd_t* cmd); -extern void mp_input_print_keys(any_t*handle); -extern void mp_input_print_cmds(any_t*handle); + // When you create a new driver you should add it in this 2 functions. + extern libinput_t* mp_input_open(void); + extern void mp_input_close(libinput_t* handle); -extern void mp_input_print_binds(any_t*handle); -// Interruptible usleep: (used by libmpdemux) -extern MPXP_Rc mp_input_check_interrupt(any_t* handle,int time); + extern void mp_input_print_keys(libinput_t*handle); + extern void mp_input_print_cmds(libinput_t*handle); + + extern void mp_input_print_binds(libinput_t*handle); + // Interruptible usleep: (used by libmpdemux) + extern MPXP_Rc mp_input_check_interrupt(libinput_t* handle,int time); +} // namespace mpxp #endif Modified: mplayerxp/input2/joystick.cpp =================================================================== --- mplayerxp/input2/joystick.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/joystick.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -25,13 +25,15 @@ #include <linux/joystick.h> +#include "in_msg.h" + +namespace mpxp { typedef struct priv_s { int axis[10]; int btns; int fd; }priv_t; -#include "in_msg.h" any_t* mp_input_joystick_open(const char* dev) { int l=0; @@ -76,18 +78,18 @@ } void mp_input_joystick_close(any_t* ctx) { - priv_t* priv = (priv_t*)ctx; + priv_t* priv = reinterpret_cast<priv_t*>(ctx); close(priv->fd); delete priv; } int mp_input_joystick_read(any_t* ctx) { - priv_t* priv = (priv_t*)ctx; + priv_t& priv = *reinterpret_cast<priv_t*>(ctx); struct js_event ev; int l=0; while((unsigned int)l < sizeof(struct js_event)) { - int r = read(priv->fd,&ev+l,sizeof(struct js_event)-l); + int r = read(priv.fd,&ev+l,sizeof(struct js_event)-l); if(r <= 0) { if(errno == EINTR) continue; else if(errno == EAGAIN) return MP_INPUT_NOTHING; @@ -107,34 +109,34 @@ MSG_WARN("Joystick : warning init event, we have lost sync with driver\n"); ev.type &= ~JS_EVENT_INIT; if(ev.type == JS_EVENT_BUTTON) { - int s = (priv->btns >> ev.number) & 1; + int s = (priv.btns >> ev.number) & 1; if(s == ev.value) // State is the same : ignore return MP_INPUT_NOTHING; } if(ev.type == JS_EVENT_AXIS) { - if( (priv->axis[ev.number] == 1 && ev.value > JOY_AXIS_DELTA) || - (priv->axis[ev.number] == -1 && ev.value < -JOY_AXIS_DELTA) || - (priv->axis[ev.number] == 0 && ev.value >= -JOY_AXIS_DELTA && ev.value <= JOY_AXIS_DELTA)) + if( (priv.axis[ev.number] == 1 && ev.value > JOY_AXIS_DELTA) || + (priv.axis[ev.number] == -1 && ev.value < -JOY_AXIS_DELTA) || + (priv.axis[ev.number] == 0 && ev.value >= -JOY_AXIS_DELTA && ev.value <= JOY_AXIS_DELTA)) // State is the same : ignore return MP_INPUT_NOTHING; } } if(ev.type & JS_EVENT_BUTTON) { - priv->btns &= ~(1 << ev.number); - priv->btns |= (ev.value << ev.number); + priv.btns &= ~(1 << ev.number); + priv.btns |= (ev.value << ev.number); if(ev.value == 1) return ((JOY_BTN0+ev.number) | MP_KEY_DOWN); else return (JOY_BTN0+ev.number); } else if(ev.type & JS_EVENT_AXIS) { - if(ev.value < -JOY_AXIS_DELTA && priv->axis[ev.number] != -1) { - priv->axis[ev.number] = -1; + if(ev.value < -JOY_AXIS_DELTA && priv.axis[ev.number] != -1) { + priv.axis[ev.number] = -1; return (JOY_AXIS0_MINUS+(2*ev.number)) | MP_KEY_DOWN; - } else if(ev.value > JOY_AXIS_DELTA && priv->axis[ev.number] != 1) { - priv->axis[ev.number] = 1; + } else if(ev.value > JOY_AXIS_DELTA && priv.axis[ev.number] != 1) { + priv.axis[ev.number] = 1; return (JOY_AXIS0_PLUS+(2*ev.number)) | MP_KEY_DOWN; - } else if(ev.value <= JOY_AXIS_DELTA && ev.value >= -JOY_AXIS_DELTA && priv->axis[ev.number] != 0) { - int r = priv->axis[ev.number] == 1 ? JOY_AXIS0_PLUS+(2*ev.number) : JOY_AXIS0_MINUS+(2*ev.number); - priv->axis[ev.number] = 0; + } else if(ev.value <= JOY_AXIS_DELTA && ev.value >= -JOY_AXIS_DELTA && priv.axis[ev.number] != 0) { + int r = priv.axis[ev.number] == 1 ? JOY_AXIS0_PLUS+(2*ev.number) : JOY_AXIS0_MINUS+(2*ev.number); + priv.axis[ev.number] = 0; return r; } else return MP_INPUT_NOTHING; @@ -144,8 +146,11 @@ } return MP_INPUT_NOTHING; } +} // namespace mpxp #else +namespace mpxp { any_t* mp_input_joystick_open(const char* dev) { UNUNSED(dev); return NULL; } void mp_input_joystick_close(any_t* ctx) { UNUSED(ctx); } int mp_input_joystick_read(any_t* ctx) { UNUSED(ctx); return MP_INPUT_NOTHING; } +} // namespace mpxp #endif Modified: mplayerxp/input2/joystick.h =================================================================== --- mplayerxp/input2/joystick.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/joystick.h 2012-12-05 11:42:31 UTC (rev 511) @@ -1,44 +1,46 @@ #ifndef JOYSTICK_H_INCLUDED #define JOYSTICK_H_INCLUDED 1 -enum { - JOY_BASE =(0x100+128), - JOY_AXIS0_PLUS =(JOY_BASE+0), - JOY_AXIS0_MINUS =(JOY_BASE+1), - JOY_AXIS1_PLUS =(JOY_BASE+2), - JOY_AXIS1_MINUS =(JOY_BASE+3), - JOY_AXIS2_PLUS =(JOY_BASE+4), - JOY_AXIS2_MINUS =(JOY_BASE+5), - JOY_AXIS3_PLUS =(JOY_BASE+6), - JOY_AXIS3_MINUS =(JOY_BASE+7), - JOY_AXIS4_PLUS =(JOY_BASE+8), - JOY_AXIS4_MINUS =(JOY_BASE+9), - JOY_AXIS5_PLUS =(JOY_BASE+10), - JOY_AXIS5_MINUS =(JOY_BASE+11), - JOY_AXIS6_PLUS =(JOY_BASE+12), - JOY_AXIS6_MINUS =(JOY_BASE+13), - JOY_AXIS7_PLUS =(JOY_BASE+14), - JOY_AXIS7_MINUS =(JOY_BASE+15), - JOY_AXIS8_PLUS =(JOY_BASE+16), - JOY_AXIS8_MINUS =(JOY_BASE+17), - JOY_AXIS9_PLUS =(JOY_BASE+18), - JOY_AXIS9_MINUS =(JOY_BASE+19) -}; -enum { - JOY_BTN_BASE=((0x100+148)|(1<<28)), - JOY_BTN0 =(JOY_BTN_BASE+0), - JOY_BTN1 =(JOY_BTN_BASE+1), - JOY_BTN2 =(JOY_BTN_BASE+2), - JOY_BTN3 =(JOY_BTN_BASE+3), - JOY_BTN4 =(JOY_BTN_BASE+4), - JOY_BTN5 =(JOY_BTN_BASE+5), - JOY_BTN6 =(JOY_BTN_BASE+6), - JOY_BTN7 =(JOY_BTN_BASE+7), - JOY_BTN8 =(JOY_BTN_BASE+8), - JOY_BTN9 =(JOY_BTN_BASE+9) -}; +namespace mpxp { + enum { + JOY_BASE =(0x100+128), + JOY_AXIS0_PLUS =(JOY_BASE+0), + JOY_AXIS0_MINUS =(JOY_BASE+1), + JOY_AXIS1_PLUS =(JOY_BASE+2), + JOY_AXIS1_MINUS =(JOY_BASE+3), + JOY_AXIS2_PLUS =(JOY_BASE+4), + JOY_AXIS2_MINUS =(JOY_BASE+5), + JOY_AXIS3_PLUS =(JOY_BASE+6), + JOY_AXIS3_MINUS =(JOY_BASE+7), + JOY_AXIS4_PLUS =(JOY_BASE+8), + JOY_AXIS4_MINUS =(JOY_BASE+9), + JOY_AXIS5_PLUS =(JOY_BASE+10), + JOY_AXIS5_MINUS =(JOY_BASE+11), + JOY_AXIS6_PLUS =(JOY_BASE+12), + JOY_AXIS6_MINUS =(JOY_BASE+13), + JOY_AXIS7_PLUS =(JOY_BASE+14), + JOY_AXIS7_MINUS =(JOY_BASE+15), + JOY_AXIS8_PLUS =(JOY_BASE+16), + JOY_AXIS8_MINUS =(JOY_BASE+17), + JOY_AXIS9_PLUS =(JOY_BASE+18), + JOY_AXIS9_MINUS =(JOY_BASE+19) + }; + enum { + JOY_BTN_BASE =((0x100+148)|(1<<28)), + JOY_BTN0 =(JOY_BTN_BASE+0), + JOY_BTN1 =(JOY_BTN_BASE+1), + JOY_BTN2 =(JOY_BTN_BASE+2), + JOY_BTN3 =(JOY_BTN_BASE+3), + JOY_BTN4 =(JOY_BTN_BASE+4), + JOY_BTN5 =(JOY_BTN_BASE+5), + JOY_BTN6 =(JOY_BTN_BASE+6), + JOY_BTN7 =(JOY_BTN_BASE+7), + JOY_BTN8 =(JOY_BTN_BASE+8), + JOY_BTN9 =(JOY_BTN_BASE+9) + }; -extern any_t* mp_input_joystick_open(const char* dev); -extern void mp_input_joystick_close(any_t* ctx); -extern int mp_input_joystick_read(any_t* ctx); + extern any_t* mp_input_joystick_open(const char* dev); + extern void mp_input_joystick_close(any_t* ctx); + extern int mp_input_joystick_read(any_t* ctx); +} // namespace mpxp #endif Modified: mplayerxp/input2/lirc.cpp =================================================================== --- mplayerxp/input2/lirc.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/lirc.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -17,6 +17,7 @@ #include "input.h" #include "in_msg.h" +namespace mpxp { static struct lirc_config *lirc_config; char *lirc_configfile; @@ -46,27 +47,27 @@ } int mp_input_lirc_read_cmd(any_t* ctx,char* dest, int s) { - priv_t* priv = (priv_t*)ctx; + priv_t& priv = *reinterpret_cast<priv_t*>(ctx); fd_set fds; struct timeval tv; int r,cl = 0; char *code = NULL,*c = NULL; // We have something in the buffer return it - if(priv->cmd_buf != NULL) { - int l = strlen(priv->cmd_buf), w = l > s ? s : l; - memcpy(dest,priv->cmd_buf,w); + if(priv.cmd_buf != NULL) { + int l = strlen(priv.cmd_buf), w = l > s ? s : l; + memcpy(dest,priv.cmd_buf,w); l -= w; - if(l > 0) memmove(priv->cmd_buf,&priv->cmd_buf[w],l+1); + if(l > 0) memmove(priv.cmd_buf,&priv.cmd_buf[w],l+1); else { - delete priv->cmd_buf; - priv->cmd_buf = NULL; + delete priv.cmd_buf; + priv.cmd_buf = NULL; } return w; } // Nothing in the buffer, pool the lirc fd FD_ZERO(&fds); - FD_SET(priv->lirc_sock,&fds); + FD_SET(priv.lirc_sock,&fds); memset(&tv,0,sizeof(tv)); while((r = select(1,&fds,NULL,NULL,&tv)) <= 0) { if(r < 0) { @@ -88,23 +89,23 @@ while((r = lirc_code2char(lirc_config,code,&c))==0 && c!=NULL) { int l = strlen(c); if(l <= 0) continue; - priv->cmd_buf = (char *)mp_realloc(priv->cmd_buf,cl+l+2); - memcpy(&priv->cmd_buf[cl],c,l); + priv.cmd_buf = (char *)mp_realloc(priv.cmd_buf,cl+l+2); + memcpy(&priv.cmd_buf[cl],c,l); cl += l+1; - priv->cmd_buf[cl-1] = '\n'; - priv->cmd_buf[cl] = '\0'; + priv.cmd_buf[cl-1] = '\n'; + priv.cmd_buf[cl] = '\0'; } delete code; if(r < 0) return MP_INPUT_DEAD; - else if(priv->cmd_buf) // return the first command in the buffer - return mp_input_lirc_read_cmd(priv,dest,s); + else if(priv.cmd_buf) // return the first command in the buffer + return mp_input_lirc_read_cmd(&priv,dest,s); else return MP_INPUT_NOTHING; } void mp_input_lirc_close(any_t* ctx) { - priv_t* priv = (priv_t*)ctx; + priv_t* priv = reinterpret_cast<priv_t*>(ctx); if(priv->cmd_buf) { delete priv->cmd_buf; priv->cmd_buf = NULL; @@ -113,5 +114,5 @@ lirc_deinit(); delete priv; } - +}// namespace mpxp #endif Modified: mplayerxp/input2/lirc.h =================================================================== --- mplayerxp/input2/lirc.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/lirc.h 2012-12-05 11:42:31 UTC (rev 511) @@ -1,7 +1,8 @@ #ifndef __LIRC_H_INCLUDED #define __LIRC_H_INCLUDED 1 - -extern any_t* mp_input_lirc_open(void); -extern int mp_input_lirc_read_cmd(any_t* ctx,char* dest, int s); -extern void mp_input_lirc_close(any_t* ctx); +namespace mpxp { + extern any_t* mp_input_lirc_open(void); + extern int mp_input_lirc_read_cmd(any_t* ctx,char* dest, int s); + extern void mp_input_lirc_close(any_t* ctx); +} // namespace mpxp #endif Modified: mplayerxp/input2/mouse.h =================================================================== --- mplayerxp/input2/mouse.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/input2/mouse.h 2012-12-05 11:42:31 UTC (rev 511) @@ -1,30 +1,31 @@ #ifndef MOUSE_H_INCLUDED #define MOUSE_H_INCLUDED 1 - -enum { - MOUSE_BASE=((0x100+256)|MP_NO_REPEAT_KEY), - MOUSE_BTN0=(MOUSE_BASE+0), - MOUSE_BTN1=(MOUSE_BASE+1), - MOUSE_BTN2=(MOUSE_BASE+2), - MOUSE_BTN3=(MOUSE_BASE+3), - MOUSE_BTN4=(MOUSE_BASE+4), - MOUSE_BTN5=(MOUSE_BASE+5), - MOUSE_BTN6=(MOUSE_BASE+6), - MOUSE_BTN7=(MOUSE_BASE+7), - MOUSE_BTN8=(MOUSE_BASE+8), - MOUSE_BTN9=(MOUSE_BASE+9) -}; -enum { - MOUSE_BASE_DBL=(0x300|MP_NO_REPEAT_KEY), - MOUSE_BTN0_DBL=(MOUSE_BASE_DBL+0), - MOUSE_BTN1_DBL=(MOUSE_BASE_DBL+1), - MOUSE_BTN2_DBL=(MOUSE_BASE_DBL+2), - MOUSE_BTN3_DBL=(MOUSE_BASE_DBL+3), - MOUSE_BTN4_DBL=(MOUSE_BASE_DBL+4), - MOUSE_BTN5_DBL=(MOUSE_BASE_DBL+5), - MOUSE_BTN6_DBL=(MOUSE_BASE_DBL+6), - MOUSE_BTN7_DBL=(MOUSE_BASE_DBL+7), - MOUSE_BTN8_DBL=(MOUSE_BASE_DBL+8), - MOUSE_BTN9_DBL=(MOUSE_BASE_DBL+9) -}; +namespace mpxp { + enum { + MOUSE_BASE=((0x100+256)|MP_NO_REPEAT_KEY), + MOUSE_BTN0=(MOUSE_BASE+0), + MOUSE_BTN1=(MOUSE_BASE+1), + MOUSE_BTN2=(MOUSE_BASE+2), + MOUSE_BTN3=(MOUSE_BASE+3), + MOUSE_BTN4=(MOUSE_BASE+4), + MOUSE_BTN5=(MOUSE_BASE+5), + MOUSE_BTN6=(MOUSE_BASE+6), + MOUSE_BTN7=(MOUSE_BASE+7), + MOUSE_BTN8=(MOUSE_BASE+8), + MOUSE_BTN9=(MOUSE_BASE+9) + }; + enum { + MOUSE_BASE_DBL=(0x300|MP_NO_REPEAT_KEY), + MOUSE_BTN0_DBL=(MOUSE_BASE_DBL+0), + MOUSE_BTN1_DBL=(MOUSE_BASE_DBL+1), + MOUSE_BTN2_DBL=(MOUSE_BASE_DBL+2), + MOUSE_BTN3_DBL=(MOUSE_BASE_DBL+3), + MOUSE_BTN4_DBL=(MOUSE_BASE_DBL+4), + MOUSE_BTN5_DBL=(MOUSE_BASE_DBL+5), + MOUSE_BTN6_DBL=(MOUSE_BASE_DBL+6), + MOUSE_BTN7_DBL=(MOUSE_BASE_DBL+7), + MOUSE_BTN8_DBL=(MOUSE_BASE_DBL+8), + MOUSE_BTN9_DBL=(MOUSE_BASE_DBL+9) + }; +} // namespace mpxp #endif \ No newline at end of file Modified: mplayerxp/libmpcodecs/dec_video.cpp =================================================================== --- mplayerxp/libmpcodecs/dec_video.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpcodecs/dec_video.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -52,7 +52,7 @@ sh_video_t* parent; const vd_functions_t* mpvdec; - any_t* libinput; + libinput_t* libinput; vd_private_t* ctx; vf_stream_t* vfilter; int vfilter_inited; @@ -139,7 +139,7 @@ #endif } -video_decoder_t * mpcv_lavc_init(sh_video_t* sh_video,any_t* libinput) { +video_decoder_t * mpcv_lavc_init(sh_video_t* sh_video,libinput_t* libinput) { video_decoder_t* handle=new(zeromem) video_decoder_t; decvideo_priv_t* priv = new(zeromem) decvideo_priv_t; priv->parent=sh_video; @@ -164,7 +164,7 @@ return handle; } -video_decoder_t * mpcv_init(sh_video_t *sh_video,const char* codecname,const char * vfm,int status,any_t*libinput){ +video_decoder_t * mpcv_init(sh_video_t *sh_video,const char* codecname,const char * vfm,int status,libinput_t*libinput){ UNUSED(codecname); UNUSED(status); int done=0; Modified: mplayerxp/libmpcodecs/dec_video.h =================================================================== --- mplayerxp/libmpcodecs/dec_video.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpcodecs/dec_video.h 2012-12-05 11:42:31 UTC (rev 511) @@ -5,14 +5,18 @@ #include "libmpstream/stream.h" #include "libmpdemux/stheader.h" +namespace mpxp { + struct libinput_t; +} + struct video_decoder_t { any_t* vd_private; }; // dec_video.c: -extern video_decoder_t* __FASTCALL__ mpcv_init(sh_video_t *sh_video, const char *codec_name,const char *family,int status,any_t*libinput); +extern video_decoder_t* __FASTCALL__ mpcv_init(sh_video_t *sh_video, const char *codec_name,const char *family,int status,libinput_t*libinput); extern void __FASTCALL__ mpcv_uninit(video_decoder_t *handle); -extern video_decoder_t* __FASTCALL__ mpcv_lavc_init(sh_video_t*,any_t* libinput); +extern video_decoder_t* __FASTCALL__ mpcv_lavc_init(sh_video_t*,libinput_t* libinput); extern int __FASTCALL__ mpcv_decode(video_decoder_t *handle,const enc_frame_t* frame); extern MPXP_Rc __FASTCALL__ mpcv_get_quality_max(video_decoder_t *handle,unsigned *qual); Modified: mplayerxp/libmpconf/cfgparser.cpp =================================================================== --- mplayerxp/libmpconf/cfgparser.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpconf/cfgparser.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -220,7 +220,7 @@ return ret; } -m_config_t* m_config_new(play_tree_t* pt,any_t*libinput) { +m_config_t* m_config_new(play_tree_t* pt,libinput_t*libinput) { m_config_t* config; #ifdef MP_DEBUG Modified: mplayerxp/libmpconf/cfgparser.h =================================================================== --- mplayerxp/libmpconf/cfgparser.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpconf/cfgparser.h 2012-12-05 11:42:31 UTC (rev 511) @@ -5,6 +5,10 @@ #define __CFG_PARSER_H 1 #include "xmpcore/xmp_enums.h" +namespace mpxp { + struct libinput_t; +} + /* config types */ enum { CONF_TYPE_FLAG =0, @@ -63,7 +67,7 @@ play_tree_t* last_entry; // last added entry play_tree_t* last_parent; // if last_entry is NULL we must create child of this int recursion_depth; - any_t* libinput; + libinput_t* libinput; }; struct config_save { @@ -89,7 +93,7 @@ */ MPXP_Rc m_config_parse_command_line(m_config_t* config, int argc, char **argv, char **envp); -m_config_t* m_config_new(play_tree_t* pt,any_t*libinput); +m_config_t* m_config_new(play_tree_t* pt,libinput_t*libinput); void m_config_free(m_config_t* config); Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -15,6 +15,7 @@ #include "libmpsub/subreader.h" #include "libmpconf/cfgparser.h" +#include "input2/input.h" #include "osdep/fastmemcpy.h" #include "libvo/sub.h" #include "libao2/afmt.h" @@ -367,7 +368,7 @@ stream_t *as = NULL,*ss = NULL; Demuxer *vd,*ad = NULL,*sd = NULL; int afmt = 0,sfmt = 0; - any_t* libinput=NULL; + libinput_t* libinput=NULL; #ifdef HAVE_STREAMIN libinput=vs->streaming_strl->libinput; #endif Modified: mplayerxp/libmpdemux/mpdemux.cpp =================================================================== --- mplayerxp/libmpdemux/mpdemux.cpp 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpdemux/mpdemux.cpp 2012-12-05 11:42:31 UTC (rev 511) @@ -7,7 +7,7 @@ #include "mpdemux.h" #include "demux_msg.h" -int mpdemux_check_interrupt(any_t* libinput,int _time) { +int mpdemux_check_interrupt(libinput_t* libinput,int _time) { mp_cmd_t* cmd; if((cmd = mp_input_get_cmd(libinput,_time,0,1)) == NULL) return 0; Modified: mplayerxp/libmpdemux/mpdemux.h =================================================================== --- mplayerxp/libmpdemux/mpdemux.h 2012-12-05 09:25:22 UTC (rev 510) +++ mplayerxp/libmpdemux/mpdemux.h 2012-12-05 11:42:31 UTC (rev 511) @@ -1,5 +1,5 @@ #ifndef MPDEMUX_H #define MPDEMUX_H 1 -extern int mpdemux_check_interrupt(any_t* libinput,int time); +extern int mpdemux_check_interrupt(libinput_t* libinput,int time); #endif Modified: mplayerxp/libmpstream/asf_mmst_streaming.cpp =================================================================== --- mplayerxp/libmpstream... [truncated message content] |
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-04 17:04:47
|
Revision: 509 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=509&view=rev Author: nickols_k Date: 2012-12-04 17:04:36 +0000 (Tue, 04 Dec 2012) Log Message: ----------- more methods for classes Note about illegal patch: before previous commit i had stable segfault on 'delete sh_video;' after converting new_sh_audio() and new_sh_video() into methods of Demuxer i have working exit_player(). This means that most probably exactly these functions where substituted. But after migrating on C++ they were converted into long names. Therefore, malefactor(s) continue(d) work parallel with me. Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/libmpdemux/Makefile mplayerxp/libmpdemux/demux_bmp.cpp mplayerxp/libmpdemux/demux_mpg.cpp mplayerxp/libmpdemux/demux_ts.cpp mplayerxp/libmpdemux/demux_ty.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpdemux/demuxer_r.cpp mplayerxp/libmpdemux/parse_es.cpp mplayerxp/libmpdemux/parse_es.h mplayerxp/libmpdemux/stheader.h mplayerxp/mplayerxp.cpp Added Paths: ----------- mplayerxp/libmpdemux/stheader.cpp Removed Paths: ------------- mplayerxp/libmpdemux/video.cpp Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/dump.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -395,7 +395,7 @@ if(shv && !veof) { float v_pts; - in_size=video_read_frame(shv,&frame_time,&v_pts,&start,0); + in_size=shv->read_frame(&frame_time,&v_pts,&start,0); cmd = check_cmd(priv); if(cmd == -1) goto done; else Modified: mplayerxp/libmpdemux/Makefile =================================================================== --- mplayerxp/libmpdemux/Makefile 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/Makefile 2012-12-04 17:04:36 UTC (rev 509) @@ -12,7 +12,7 @@ CXXSRCS += demux_dv.cpp endif -CXXSRCS += mp3_hdr.cpp video.cpp mpeg_hdr.cpp aviprint.cpp parse_mp4.cpp parse_es.cpp +CXXSRCS += mp3_hdr.cpp stheader.cpp mpeg_hdr.cpp aviprint.cpp parse_mp4.cpp parse_es.cpp CXXSRCS += yuv4mpeg.cpp yuv4mpeg_ratio.cpp sub_cc.cpp sub_ty.cpp CXXSRCS += demux_aiff.cpp \ demux_asf.cpp \ Modified: mplayerxp/libmpdemux/demux_bmp.cpp =================================================================== --- mplayerxp/libmpdemux/demux_bmp.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/demux_bmp.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -227,7 +227,7 @@ stream_reset(demuxer->stream); stream_seek(demuxer->stream, bmp_image->image_offset); - ds_read_packet(demuxer->video, demuxer->stream, bmp_image->image_size, + demuxer->video->read_packet(demuxer->stream, bmp_image->image_size, 0, bmp_image->image_offset, DP_KEYFRAME); return 1; } Modified: mplayerxp/libmpdemux/demux_mpg.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/demux_mpg.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -591,11 +591,11 @@ continue; } } - i=sync_video_packet(d_video); + i=sync_video_packet(*d_video); if(sh_video->fourcc == VIDEO_MPEG4) { if(i==0x1B6) { //vop (frame) startcode int pos = videobuf_len; - if(!read_video_packet(d_video)) break; // EOF + if(!read_video_packet(*d_video)) break; // EOF if((videobuffer[pos+4] & 0x3F) == 0) break;//I-frame } } else if(sh_video->fourcc == VIDEO_H264){ @@ -603,7 +603,7 @@ } else { //default VIDEO_MPEG1/VIDEO_MPEG2 if(i==0x1B3 || i==0x1B8) break; // found it! } - if(!i || !skip_video_packet(d_video)) break; // EOF? + if(!i || !skip_video_packet(*d_video)) break; // EOF? } } Modified: mplayerxp/libmpdemux/demux_ts.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ts.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/demux_ts.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -3045,9 +3045,6 @@ priv->fifo[2].offset = 0; } } -extern int videobuf_code_len; -extern int sync_video_packet(Demuxer_Stream *); -extern int skip_video_packet(Demuxer_Stream *); static void ts_seek(Demuxer *demuxer,const seek_args_t* seeka) { @@ -3126,7 +3123,7 @@ } } - i = sync_video_packet(d_video); + i = sync_video_packet(*d_video); if((sh_video->fourcc == VIDEO_MPEG1) || (sh_video->fourcc == VIDEO_MPEG2)) { if(i==0x1B3 || i==0x1B8) break; // found it! @@ -3140,7 +3137,7 @@ if((i & ~0x60) == 0x105) break; } - if(!i || !skip_video_packet(d_video)) break; // EOF? + if(!i || !skip_video_packet(*d_video)) break; // EOF? } } Modified: mplayerxp/libmpdemux/demux_ty.cpp =================================================================== --- mplayerxp/libmpdemux/demux_ty.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/demux_ty.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -809,9 +809,9 @@ continue; } } - i = sync_video_packet( d_video ); + i = sync_video_packet(*d_video); if( i == 0x1B3 || i == 0x1B8 ) break; // found it! - if( !i || !skip_video_packet( d_video ) ) break; // EOF? + if( !i || !skip_video_packet(*d_video) ) break; // EOF? } if ( mp_conf.subcc_enabled ) ty_ClearOSD( 0 ); Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -445,14 +445,4 @@ return id; } -sh_audio_t::~sh_audio_t(){ - MSG_V("DEMUXER: freeing sh_audio at %p \n",this); - if(wf) delete wf; -} - -sh_video_t::~sh_video_t(){ - MSG_V("DEMUXER: freeing sh_video at %p \n",this); - if(bih) delete bih; -} - } // namespace mpxp Modified: mplayerxp/libmpdemux/demuxer_r.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/demuxer_r.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -108,7 +108,7 @@ double tt; LOCK_DEMUXER(); if(mp_conf.benchmark) t=GetTimer(); - retval = video_read_frame(sh_video,&frame_time,&v_pts,&start,force_fps); + retval = sh_video->read_frame(&frame_time,&v_pts,&start,force_fps); if(retval<=0) return NULL; frame=new_enc_frame(VideoFrame,retval,v_pts,frame_time); frame->data=start; Modified: mplayerxp/libmpdemux/parse_es.cpp =================================================================== --- mplayerxp/libmpdemux/parse_es.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/parse_es.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -20,7 +20,7 @@ int videobuf_code_len=0; // sync video stream, and returns next packet code -int sync_video_packet(Demuxer_Stream *ds){ +int sync_video_packet(Demuxer_Stream& ds){ int skipped=0; // we need enough bytes in the buffer: while(videobuf_code_len<4){ @@ -29,7 +29,7 @@ c=demux_getc(ds);if(c<0){ return 0;} // EOF videobuf_code[videobuf_code_len++]=c; #else - videobuf_code[videobuf_code_len++]=ds->getch(); + videobuf_code[videobuf_code_len++]=ds.getch(); #endif } // sync packet: @@ -43,7 +43,7 @@ videobuf_code[0]=videobuf_code[1]; videobuf_code[1]=videobuf_code[2]; videobuf_code[2]=videobuf_code[3]; - c=ds->getch();if(c<0){ return 0;} // EOF + c=ds.getch();if(c<0){ return 0;} // EOF videobuf_code[3]=c; } if(skipped) MSG_DBG2("videobuf: %d bytes skipped (next: 0x1%02X)\n",skipped,videobuf_code[3]); @@ -51,7 +51,7 @@ } // return: packet length -int read_video_packet(Demuxer_Stream *ds){ +int read_video_packet(Demuxer_Stream& ds){ int packet_start; // SYNC STREAM @@ -68,7 +68,7 @@ // READ PACKET: { unsigned int head=-1; while(videobuf_len<VIDEOBUFFER_SIZE){ - int c=ds->getch(); + int c=ds.getch(); if(c<0) break; // EOF videobuffer[videobuf_len++]=c; #if 1 @@ -83,7 +83,7 @@ } } - if(ds->eof){ + if(ds.eof){ videobuf_code_len=0; // EOF, no next code return videobuf_len-packet_start; } @@ -103,7 +103,7 @@ } // return: next packet code -int skip_video_packet(Demuxer_Stream *ds){ +int skip_video_packet(Demuxer_Stream& ds){ // SYNC STREAM // if(!sync_video_packet(ds)) return 0; // cannot sync (EOF) Modified: mplayerxp/libmpdemux/parse_es.h =================================================================== --- mplayerxp/libmpdemux/parse_es.h 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/parse_es.h 2012-12-04 17:04:36 UTC (rev 509) @@ -11,11 +11,11 @@ extern int videobuf_code_len; // sync video stream, and returns next packet code -int sync_video_packet(Demuxer_Stream *ds); +int sync_video_packet(Demuxer_Stream& ds); // return: packet length -int read_video_packet(Demuxer_Stream *ds); +int read_video_packet(Demuxer_Stream& ds); // return: next packet code -int skip_video_packet(Demuxer_Stream *ds); +int skip_video_packet(Demuxer_Stream& ds); #endif Copied: mplayerxp/libmpdemux/stheader.cpp (from rev 508, mplayerxp/libmpdemux/video.cpp) =================================================================== --- mplayerxp/libmpdemux/stheader.cpp (rev 0) +++ mplayerxp/libmpdemux/stheader.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -0,0 +1,597 @@ +#include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; +// read vmpideo frame + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "help_mp.h" +#include "sub_cc.h" + +#include "libmpstream/stream.h" +#include "demuxer.h" +#include "stheader.h" +#include "parse_es.h" +#include "mpeg_hdr.h" +#include "mplayerxp.h" +#include "demux_msg.h" + +extern void ty_processuserdata(const unsigned char* buf, int len ); +namespace mpxp { + +sh_audio_t::~sh_audio_t(){ + MSG_V("DEMUXER: freeing sh_audio at %p \n",this); + if(wf) delete wf; +} + +sh_video_t::~sh_video_t(){ + MSG_V("DEMUXER: freeing sh_video at %p \n",this); + if(bih) delete bih; +} + +/* biCompression constant */ +#define BI_RGB 0L + +static mp_mpeg_header_t picture; +static int telecine=0; +static float telecine_cnt=-2.5; + +#if 0 +/* aspect 0 means don't prescale */ +static float mpeg1_aspects[]= +{ + 0.0000, 0.0000, 1.4848, 1.4222, 1.3131, 1.2415, 1.1853, 1.1912, + 1.0666, 1.0188, 1.0255, 1.0695, 1.1250, 1.1575, 1.2015, 0.0000 +}; + +static float mpeg2_aspects[]= +{ + 0.0000, 0.0000, 1.3333, 1.7777, 2.2100, 0.8055, 0.8437, 0.8935, + 0.9375, 0.9815, 1.0255, 1.0695, 1.1250, 1.1575, 1.2015, 0.0000 +}; + +static float mpeg_framerates[]= +{ + 0.000, 23.976, 24.000, 25.000, 29.970, 30.000, 50.000, 59.940, 60.000, + 15.000, /* Xing's 15fps: (9)*/ + /* libmpeg3's "Unofficial economy rates": (10-13) */ + 5.00,10.00,12.00,15.00, + /* some invalid ones: (14-15) */ + 0.0, 0.0 +}; +#endif +int sh_video_t::read_properties(){ +Demuxer_Stream& d_video=*ds; + +enum { + VIDEO_MPEG12, + VIDEO_MPEG4, + VIDEO_H264, + VIDEO_OTHER +} video_codec; + +if((d_video.demuxer->file_format == Demuxer::Type_PVA) || + (d_video.demuxer->file_format == Demuxer::Type_MPEG_ES) || + (d_video.demuxer->file_format == Demuxer::Type_MPEG_PS && ((! fourcc) || (fourcc==0x10000001) || (fourcc==0x10000002))) || + (d_video.demuxer->file_format == Demuxer::Type_MPEG_TS && ((fourcc==0x10000001) || (fourcc==0x10000002))) +#ifdef STREAMING_LIVE_DOT_COM + || ((d_video.demuxer->file_format == Demuxer::Type_RTP) && demux_is_mpeg_rtp_stream(d_video.demuxer)) +#endif + ) + video_codec = VIDEO_MPEG12; + else if((d_video.demuxer->file_format == Demuxer::Type_MPEG4_ES) || + ((d_video.demuxer->file_format == Demuxer::Type_MPEG_TS) && (fourcc==0x10000004)) || + ((d_video.demuxer->file_format == Demuxer::Type_MPEG_PS) && (fourcc==0x10000004)) + ) + video_codec = VIDEO_MPEG4; + else if((d_video.demuxer->file_format == Demuxer::Type_H264_ES) || + ((d_video.demuxer->file_format == Demuxer::Type_MPEG_TS) && (fourcc==0x10000005)) || + ((d_video.demuxer->file_format == Demuxer::Type_MPEG_PS) && (fourcc==0x10000005)) + ) + video_codec = VIDEO_H264; + else + video_codec = VIDEO_OTHER; + +// Determine image properties: +switch(video_codec){ + case VIDEO_OTHER: { + if((d_video.demuxer->file_format == Demuxer::Type_ASF) || (d_video.demuxer->file_format == Demuxer::Type_AVI)) { + // display info: +#if 0 + if(bih->biCompression == BI_RGB && + (video.fccHandler == mmioFOURCC('D', 'I', 'B', ' ') || + video.fccHandler == mmioFOURCC('R', 'G', 'B', ' ') || + video.fccHandler == mmioFOURCC('R', 'A', 'W', ' ') || + video.fccHandler == 0)) { + fourcc = mmioFOURCC(0, 'R', 'G', 'B') | bih->biBitCount; + } + else +#endif + fourcc=bih->biCompression; + + src_w=bih->biWidth; + src_h=abs(bih->biHeight); + +#if 1 + /* hack to support decoding of mpeg1 chunks in AVI's with libmpeg2 -- 2002 alex */ + if ((fourcc == 0x10000001) || + (fourcc == 0x10000002) || + (fourcc == mmioFOURCC('m','p','g','1')) || + (fourcc == mmioFOURCC('M','P','G','1')) || + (fourcc == mmioFOURCC('m','p','g','2')) || + (fourcc == mmioFOURCC('M','P','G','2')) || + (fourcc == mmioFOURCC('m','p','e','g')) || + (fourcc == mmioFOURCC('M','P','E','G'))) + { + int saved_pos; + Demuxer::demuxer_type_e saved_type; + + /* demuxer pos saving is required for libavcodec mpeg decoder as it's + reading the mpeg header self! */ + +// saved_pos = d_video.buffer_pos; + saved_type = d_video.demuxer->file_format; + + d_video.demuxer->file_format = Demuxer::Type_MPEG_ES; + read_properties(); + d_video.demuxer->file_format = saved_type; +// d_video.buffer_pos = saved_pos; +// goto mpeg_header_parser; + } +#endif + } + break; + } + case VIDEO_MPEG4: { + int pos = 0, vop_cnt=0, units[3]; + videobuf_len=0; videobuf_code_len=0; + MSG_V("Searching for Video Object Start code... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + if(i<=0x11F) break; // found it! + if(!i || !skip_video_packet(d_video)){ + MSG_V("NONE :(\n"); + return 0; + } + } + MSG_V("OK!\n"); + if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; + if(!videobuffer){ + MSG_ERR(MSGTR_ShMemAllocFail); + return 0; + } + MSG_V("Searching for Video Object Layer Start code... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + MSG_V("M4V: 0x%X\n",i); + if(i>=0x120 && i<=0x12F) break; // found it! + if(!i || !read_video_packet(d_video)){ + MSG_V("NONE :(\n"); + return 0; + } + } + pos = videobuf_len+4; + if(!read_video_packet(d_video)){ + MSG_ERR("Can't read Video Object Layer Header\n"); + return 0; + } + mp4_header_process_vol(&picture, &(videobuffer[pos])); + MSG_V("OK! FPS SEEMS TO BE %.3f\nSearching for Video Object Plane Start code... ", fps);fflush(stdout); + mp4_init: + while(1){ + int i=sync_video_packet(d_video); + if(i==0x1B6) break; // found it! + if(!i || !read_video_packet(d_video)){ + MSG_V("NONE :(\n"); + return 0; + } + } + pos = videobuf_len+4; + if(!read_video_packet(d_video)){ + MSG_ERR("Can't read Video Object Plane Header\n"); + return 0; + } + mp4_header_process_vop(&picture, &(videobuffer[pos])); + units[vop_cnt] = picture.timeinc_unit; + vop_cnt++; + //mp_msg(MSGT_DECVIDEO,MSGL_V, "TYPE: %d, unit: %d\n", picture.picture_type, picture.timeinc_unit); + if(!picture.fps) { + int i, mn, md, mx, diff; + if(vop_cnt < 3) + goto mp4_init; + + i=0; + mn = mx = units[0]; + for(i=0; i<3; i++) { + if(units[i] < mn) + mn = units[i]; + if(units[i] > mx) + mx = units[i]; + } + md = mn; + for(i=0; i<3; i++) { + if((units[i] > mn) && (units[i] < mx)) + md = units[i]; + } + MSG_V("MIN: %d, mid: %d, max: %d\n", mn, md, mx); + if(mx - md > md - mn) + diff = md - mn; + else + diff = mx - md; + if(diff > 0){ + picture.fps = (picture.timeinc_resolution * 10000) / diff; + MSG_V("FPS seems to be: %d/10000, resolution: %d, delta_units: %d\n", picture.fps, picture.timeinc_resolution, diff); + } + } + if(picture.fps) { + fps=picture.fps*0.0001f; + MSG_INFO("FPS seems to be: %d/10000\n", picture.fps); + } + MSG_V("OK!\n"); + fourcc=0x10000004; + break; + } + case VIDEO_H264: { + int pos = 0; + videobuf_len=0; videobuf_code_len=0; + MSG_V("Searching for sequence parameter set... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + if((i&~0x60) == 0x107 && i != 0x107) break; // found it! + if(!i || !skip_video_packet(d_video)){ + MSG_V("NONE :(\n"); + return 0; + } + } + MSG_V("OK!\n"); + if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; + if(!videobuffer){ + MSG_ERR(MSGTR_ShMemAllocFail); + return 0; + } + pos = videobuf_len+4; + if(!read_video_packet(d_video)){ + MSG_ERR("Can't read sequence parameter set\n"); + return 0; + } + h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos); + MSG_V("Searching for picture parameter set... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + MSG_V("H264: 0x%X\n",i); + if((i&~0x60) == 0x108 && i != 0x108) break; // found it! + if(!i || !read_video_packet(d_video)){ + MSG_V("NONE :(\n"); + return 0; + } + } + MSG_V("OK!\nSearching for Slice... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; // found it! + if(!i || !read_video_packet(d_video)){ + MSG_V("NONE :(\n"); + return 0; + } + } + MSG_V("OK!\n"); + fourcc=0x10000005; + if(picture.fps) { + fps=picture.fps*0.0001f; + MSG_INFO("FPS seems to be: %d/10000\n", picture.fps); + } + break; + } + case VIDEO_MPEG12: { +//mpeg_header_parser: + // Find sequence_header first: + videobuf_len=0; videobuf_code_len=0; + telecine=0; telecine_cnt=-2.5; + MSG_V("Searching for sequence header... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + if(i==0x1B3) break; // found it! + if(!i || !skip_video_packet(d_video)){ + MSG_V("NONE :(\n"); + MSG_ERR(MSGTR_MpegNoSequHdr); + return 0; + } + } + MSG_V("OK!\n"); +// sh_video=d_video.sh;ds=d_video; +// mpeg2_init(); + // ========= Read & process sequence header & extension ============ + if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; + if(!videobuffer){ + MSG_ERR(MSGTR_ShMemAllocFail); + return 0; + } + + if(!read_video_packet(d_video)){ + MSG_ERR(MSGTR_CannotReadMpegSequHdr); + return 0; + } + if(mp_header_process_sequence_header (&picture, &videobuffer[4])) { + MSG_ERR(MSGTR_BadMpegSequHdr); + return 0; + } + if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext. +// videobuf_len=0; + int pos=videobuf_len; + if(!read_video_packet(d_video)){ + MSG_ERR(MSGTR_CannotReadMpegSequHdrEx); + return 0; + } + if(mp_header_process_extension (&picture, &videobuffer[pos+4])) { + MSG_ERR(MSGTR_BadMpegSequHdrEx); + return 0; + } + } + // fill aspect info: + switch(picture.aspect_ratio_information){ + case 2: // PAL/NTSC SVCD/DVD 4:3 + case 8: // PAL VCD 4:3 + case 12: // NTSC VCD 4:3 + aspect=4.0/3.0; + break; + case 3: // PAL/NTSC Widescreen SVCD/DVD 16:9 + case 6: // (PAL?)/NTSC Widescreen SVCD 16:9 + aspect=16.0/9.0; + break; + case 4: // according to ISO-138182-2 Table 6.3 + aspect=2.21; + break; + case 9: // Movie Type ??? / 640x480 + aspect=0.0; + break; + default: + MSG_ERR("Detected unknown aspect_ratio_information in mpeg sequence header.\n" + "Please report the aspect value (%i) along with the movie type (VGA,PAL,NTSC," + "SECAM) and the movie resolution (720x576,352x240,480x480,...) to the MPlayer" + " developers, so that we can add support for it!\nAssuming 1:1 aspect for now.\n", + picture.aspect_ratio_information); + case 1: // VGA 1:1 - do not prescale + aspect=0.0; + break; + } + // fill aspect info: + fourcc=picture.mpeg1?0x10000001:0x10000002; // mpeg video +#if 0 + if(picture.mpeg1) + aspect=mpeg1_aspects[picture.aspect_ratio_information & 0x0F]; + else + aspect=mpeg2_aspects[picture.aspect_ratio_information & 0x0F]; +#endif + // display info: + fps=picture.fps*0.0001f; +#if 0 + fps=mpeg_framerates[picture.frame_rate_code & 0x0F]; +#endif + src_w=picture.display_picture_width; + src_h=picture.display_picture_height; + // info: + MSG_DBG2("mpeg bitrate: %d (%X)\n",picture.bitrate,picture.bitrate); + MSG_V("VIDEO: %s %dx%d (aspect %d) %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", + picture.mpeg1?"MPEG1":"MPEG2", + src_w,src_h, + picture.aspect_ratio_information, + fps, + picture.bitrate*0.5f, + picture.bitrate/16.0f ); + break; + } +} // switch(file_format) + +return 1; +} + +static void process_userdata(const unsigned char* buf,int len){ + int i; + /* if the user data starts with "CC", assume it is a Closed Captions info packet */ + if(len>2 && buf[0]=='C' && buf[1]=='C'){ + subcc_process_data(buf+2,len-2); + } + if( len > 2 && buf[ 0 ] == 'T' && buf[ 1 ] == 'Y' ) + { + ty_processuserdata( buf + 2, len - 2 ); + return; + } + MSG_V( "user_data: len=%3d %02X %02X %02X %02X '", + len, buf[0], buf[1], buf[2], buf[3]); + for(i=0;i<len;i++) + if(buf[i]>=32 && buf[i]<127) MSG_V("%c",buf[i]); + MSG_V("'\n"); +} + +int sh_video_t::read_frame(float* frame_time_ptr,float *v_pts,unsigned char** start,int force_fps){ + Demuxer_Stream& d_video=*ds; + Demuxer *demuxer=d_video.demuxer; + float frame_time=1; + float pts1=d_video.pts; + int picture_coding_type=0; +// unsigned char* start=NULL; + int in_size=0; + + *start=NULL; + + if(demuxer->file_format==Demuxer::Type_MPEG_ES || + (demuxer->file_format==Demuxer::Type_MPEG_PS && ((! fourcc) || (fourcc==0x10000001) || (fourcc==0x10000002))) + || demuxer->file_format==Demuxer::Type_PVA || + ((demuxer->file_format==Demuxer::Type_MPEG_TS) && ((fourcc==0x10000001) || (fourcc==0x10000002)))) + { + int in_frame=0; + //float newfps; + //videobuf_len=0; + while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ + int i=sync_video_packet(d_video); + //any_t* buffer=&videobuffer[videobuf_len+4]; + int __start=videobuf_len+4; + if(in_frame){ + if(i<0x101 || i>=0x1B0){ // not slice code -> end of frame +#if 1 + // send END OF FRAME code: + videobuffer[videobuf_len+0]=0; + videobuffer[videobuf_len+1]=0; + videobuffer[videobuf_len+2]=1; + videobuffer[videobuf_len+3]=0xFF; + videobuf_len+=4; +#endif + if(!i) return -1; // EOF + break; + } + } else { + //if(i==0x100) in_frame=1; // picture startcode + if(i>=0x101 && i<0x1B0) in_frame=1; // picture startcode + else if(!i) return -1; // EOF + } + if(!read_video_packet(d_video)) return -1; // EOF + // process headers: + switch(i){ + case 0x1B3: mp_header_process_sequence_header (&picture, &videobuffer[__start]);break; + case 0x1B5: mp_header_process_extension (&picture, &videobuffer[__start]);break; + case 0x1B2: process_userdata (&videobuffer[__start], videobuf_len-__start);break; + case 0x100: picture_coding_type=(videobuffer[__start+1] >> 3) & 7;break; + } + } + // if(videobuf_len>max_framesize) max_framesize=videobuf_len; // debug + *start=videobuffer; in_size=videobuf_len; + +#if 1 + // get mpeg fps: + //newfps=frameratecode2framerate[picture->frame_rate_code]*0.0001f; + if((int)(fps*10000+0.5)!=picture.fps) if(!force_fps && !telecine){ + MSG_WARN("Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",fps,picture.fps*0.0001,fps-picture.fps*0.0001,picture.frame_rate_code); + fps=picture.fps*0.0001; + } +#endif + + // fix mpeg2 frametime: + frame_time=(picture.display_time)*0.01f; + picture.display_time=100; + videobuf_len=0; + + telecine_cnt*=0.9; // drift out error + telecine_cnt+=frame_time-5.0/4.0; + MSG_DBG2("\r telecine = %3.1f %5.3f \n",frame_time,telecine_cnt); + + if(telecine){ + frame_time=1; + if(telecine_cnt<-1.5 || telecine_cnt>1.5){ + MSG_INFO("Leave telecine mode\n"); + telecine=0; + } + } else + if(telecine_cnt>-0.5 && telecine_cnt<0.5 && !force_fps){ + fps=fps*4/5; + MSG_INFO("Enter telecine mode\n"); + telecine=1; + } + + } else if((demuxer->file_format==Demuxer::Type_MPEG4_ES) || ((demuxer->file_format==Demuxer::Type_MPEG_TS) && (fourcc==0x10000004)) || + ((demuxer->file_format==Demuxer::Type_MPEG_PS) && (fourcc==0x10000004)) + ){ + // + while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ + int i=sync_video_packet(d_video); + if(!i) return -1; + if(!read_video_packet(d_video)) return -1; // EOF + if(i==0x1B6) break; + } + *start=videobuffer; in_size=videobuf_len; + videobuf_len=0; + + } else if(demuxer->file_format==Demuxer::Type_H264_ES || ((demuxer->file_format==Demuxer::Type_MPEG_TS) && (fourcc==0x10000005)) || + ((demuxer->file_format==Demuxer::Type_MPEG_PS) && (fourcc==0x10000005)) + ){ + // + while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ + int i=sync_video_packet(d_video); + int pos = videobuf_len+4; + if(!i) return -1; + if(!read_video_packet(d_video)) return -1; // EOF + if((i&~0x60) == 0x107 && i != 0x107) { + h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos); + if(picture.fps > 0) { + fps=picture.fps*0.0001f; + } + i=sync_video_packet(d_video); + if(!i) return -1; + if(!read_video_packet(d_video)) return -1; // EOF + } + if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; + } + *start=videobuffer; in_size=videobuf_len; + videobuf_len=0; + } else { + /* frame-based file formats: (AVI,ASF,MOV) */ + in_size=d_video.get_packet(start); + if(in_size<0) return -1; // EOF + } + + // Increase video timers: + frame_time*=1.0f/fps; + + /* override frame_time for variable/unknown FPS formats: */ + if(!force_fps) + switch(demuxer->file_format) + { + case Demuxer::Type_REAL: + case Demuxer::Type_MATROSKA: + if(d_video.pts>0 && pts1>0 && d_video.pts>pts1) + frame_time=d_video.pts-pts1; + break; + default: +#ifdef USE_TV + case Demuxer::Type_TV: +#endif + case Demuxer::Type_MOV: + case Demuxer::Type_FILM: + case Demuxer::Type_VIVO: + case Demuxer::Type_ASF: { + /* .ASF files has no fixed FPS - just frame durations! */ + float next_pts = d_video.get_next_pts(); + float d= next_pts > 0 ? next_pts - d_video.pts : d_video.pts-pts1; + if(d>=0){ + if(d>0) + if((int)fps==1000) + MSG_STATUS("\rASF framerate: %d fps \n",(int)(1.0f/d)); + fps=1.0f/d; + frame_time = d; + } else { + MSG_WARN("\nInvalid frame duration value (%2.5f/%2.5f => %5.3f). Defaulting to 1/25 sec.\n",d_video.pts,next_pts,frame_time); + frame_time = 1/25.0; + } + } + } + if(demuxer->file_format==Demuxer::Type_MPEG_PS || + demuxer->file_format==Demuxer::Type_MPEG_ES || + demuxer->file_format==Demuxer::Type_MPEG_TS) d_video.pts+=frame_time; + /* FIXUP VIDEO PTS*/ + if((demuxer->file_format == Demuxer::Type_MPEG_ES || + demuxer->file_format == Demuxer::Type_MPEG4_ES || + demuxer->file_format == Demuxer::Type_H264_ES || + demuxer->file_format == Demuxer::Type_MPEG_PS || + ((demuxer->file_format==Demuxer::Type_MPEG_TS) && ((fourcc==0x10000001) || (fourcc==0x10000002))) || + mp_conf.av_force_pts_fix) && mp_conf.av_sync_pts && mp_conf.av_force_pts_fix2!=1) + { + if(d_video.pts_flags && d_video.pts < 1.0 && d_video.prev_pts > 2.0) + { + float spts; + spts=d_video.demuxer->stream->stream_pts; + d_video.pts_corr=spts>0?spts:d_video.prev_pts; + d_video.pts_flags=0; + MSG_V("***PTS discontinuity happens*** correcting video %f pts as %f\n",d_video.pts,d_video.pts_corr); + } + if(d_video.pts>1.0) d_video.pts_flags=1; + if(!d_video.eof) d_video.prev_pts=d_video.pts+d_video.pts_corr; + *v_pts=d_video.prev_pts; + } + else *v_pts=d_video.pts; + + if(frame_time_ptr) *frame_time_ptr=frame_time; + return in_size; +} +} // namespace mpxp Modified: mplayerxp/libmpdemux/stheader.h =================================================================== --- mplayerxp/libmpdemux/stheader.h 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/stheader.h 2012-12-04 17:04:36 UTC (rev 509) @@ -79,6 +79,8 @@ sh_video_t() {} virtual ~sh_video_t(); + virtual int read_properties(); + virtual int read_frame(float* frame_time_ptr,float *v_pts,unsigned char** start,int force_fps); // input format uint32_t fourcc; int is_static; /* default: 0 - means movie; 1 - means picture (.jpg ...)*/ @@ -95,8 +97,6 @@ BITMAPINFOHEADER*bih; // in format ImageDescription*ImageDesc; // for quicktime codecs }; - int video_read_properties(sh_video_t *sh_video); - int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,float *v_pts,unsigned char** start,int force_fps); } //namespace mpxp #endif Deleted: mplayerxp/libmpdemux/video.cpp =================================================================== --- mplayerxp/libmpdemux/video.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/libmpdemux/video.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -1,586 +0,0 @@ -#include "mp_config.h" -#include "osdep/mplib.h" -using namespace mpxp; -// read vmpideo frame - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "help_mp.h" -#include "sub_cc.h" - -#include "libmpstream/stream.h" -#include "demuxer.h" -#include "stheader.h" -#include "parse_es.h" -#include "mpeg_hdr.h" -#include "mplayerxp.h" -#include "demux_msg.h" - -extern void ty_processuserdata(const unsigned char* buf, int len ); -namespace mpxp { -/* biCompression constant */ -#define BI_RGB 0L - -static mp_mpeg_header_t picture; -static int telecine=0; -static float telecine_cnt=-2.5; - -#if 0 -/* aspect 0 means don't prescale */ -static float mpeg1_aspects[]= -{ - 0.0000, 0.0000, 1.4848, 1.4222, 1.3131, 1.2415, 1.1853, 1.1912, - 1.0666, 1.0188, 1.0255, 1.0695, 1.1250, 1.1575, 1.2015, 0.0000 -}; - -static float mpeg2_aspects[]= -{ - 0.0000, 0.0000, 1.3333, 1.7777, 2.2100, 0.8055, 0.8437, 0.8935, - 0.9375, 0.9815, 1.0255, 1.0695, 1.1250, 1.1575, 1.2015, 0.0000 -}; - -static float mpeg_framerates[]= -{ - 0.000, 23.976, 24.000, 25.000, 29.970, 30.000, 50.000, 59.940, 60.000, - 15.000, /* Xing's 15fps: (9)*/ - /* libmpeg3's "Unofficial economy rates": (10-13) */ - 5.00,10.00,12.00,15.00, - /* some invalid ones: (14-15) */ - 0.0, 0.0 -}; -#endif -int video_read_properties(sh_video_t *sh_video){ -Demuxer_Stream *d_video=sh_video->ds; - -enum { - VIDEO_MPEG12, - VIDEO_MPEG4, - VIDEO_H264, - VIDEO_OTHER -} video_codec; - -if((d_video->demuxer->file_format == Demuxer::Type_PVA) || - (d_video->demuxer->file_format == Demuxer::Type_MPEG_ES) || - (d_video->demuxer->file_format == Demuxer::Type_MPEG_PS && ((! sh_video->fourcc) || (sh_video->fourcc==0x10000001) || (sh_video->fourcc==0x10000002))) || - (d_video->demuxer->file_format == Demuxer::Type_MPEG_TS && ((sh_video->fourcc==0x10000001) || (sh_video->fourcc==0x10000002))) -#ifdef STREAMING_LIVE_DOT_COM - || ((d_video->demuxer->file_format == Demuxer::Type_RTP) && demux_is_mpeg_rtp_stream(d_video->demuxer)) -#endif - ) - video_codec = VIDEO_MPEG12; - else if((d_video->demuxer->file_format == Demuxer::Type_MPEG4_ES) || - ((d_video->demuxer->file_format == Demuxer::Type_MPEG_TS) && (sh_video->fourcc==0x10000004)) || - ((d_video->demuxer->file_format == Demuxer::Type_MPEG_PS) && (sh_video->fourcc==0x10000004)) - ) - video_codec = VIDEO_MPEG4; - else if((d_video->demuxer->file_format == Demuxer::Type_H264_ES) || - ((d_video->demuxer->file_format == Demuxer::Type_MPEG_TS) && (sh_video->fourcc==0x10000005)) || - ((d_video->demuxer->file_format == Demuxer::Type_MPEG_PS) && (sh_video->fourcc==0x10000005)) - ) - video_codec = VIDEO_H264; - else - video_codec = VIDEO_OTHER; - -// Determine image properties: -switch(video_codec){ - case VIDEO_OTHER: { - if((d_video->demuxer->file_format == Demuxer::Type_ASF) || (d_video->demuxer->file_format == Demuxer::Type_AVI)) { - // display info: -#if 0 - if(sh_video->bih->biCompression == BI_RGB && - (sh_video->video.fccHandler == mmioFOURCC('D', 'I', 'B', ' ') || - sh_video->video.fccHandler == mmioFOURCC('R', 'G', 'B', ' ') || - sh_video->video.fccHandler == mmioFOURCC('R', 'A', 'W', ' ') || - sh_video->video.fccHandler == 0)) { - sh_video->fourcc = mmioFOURCC(0, 'R', 'G', 'B') | sh_video->bih->biBitCount; - } - else -#endif - sh_video->fourcc=sh_video->bih->biCompression; - - sh_video->src_w=sh_video->bih->biWidth; - sh_video->src_h=abs(sh_video->bih->biHeight); - -#if 1 - /* hack to support decoding of mpeg1 chunks in AVI's with libmpeg2 -- 2002 alex */ - if ((sh_video->fourcc == 0x10000001) || - (sh_video->fourcc == 0x10000002) || - (sh_video->fourcc == mmioFOURCC('m','p','g','1')) || - (sh_video->fourcc == mmioFOURCC('M','P','G','1')) || - (sh_video->fourcc == mmioFOURCC('m','p','g','2')) || - (sh_video->fourcc == mmioFOURCC('M','P','G','2')) || - (sh_video->fourcc == mmioFOURCC('m','p','e','g')) || - (sh_video->fourcc == mmioFOURCC('M','P','E','G'))) - { - int saved_pos; - Demuxer::demuxer_type_e saved_type; - - /* demuxer pos saving is required for libavcodec mpeg decoder as it's - reading the mpeg header self! */ - -// 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; -// goto mpeg_header_parser; - } -#endif - } - break; - } - case VIDEO_MPEG4: { - int pos = 0, vop_cnt=0, units[3]; - videobuf_len=0; videobuf_code_len=0; - MSG_V("Searching for Video Object Start code... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - if(i<=0x11F) break; // found it! - if(!i || !skip_video_packet(d_video)){ - MSG_V("NONE :(\n"); - return 0; - } - } - MSG_V("OK!\n"); - if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; - if(!videobuffer){ - MSG_ERR(MSGTR_ShMemAllocFail); - return 0; - } - MSG_V("Searching for Video Object Layer Start code... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - MSG_V("M4V: 0x%X\n",i); - if(i>=0x120 && i<=0x12F) break; // found it! - if(!i || !read_video_packet(d_video)){ - MSG_V("NONE :(\n"); - return 0; - } - } - pos = videobuf_len+4; - if(!read_video_packet(d_video)){ - MSG_ERR("Can't read Video Object Layer Header\n"); - return 0; - } - mp4_header_process_vol(&picture, &(videobuffer[pos])); - MSG_V("OK! FPS SEEMS TO BE %.3f\nSearching for Video Object Plane Start code... ", sh_video->fps);fflush(stdout); - mp4_init: - while(1){ - int i=sync_video_packet(d_video); - if(i==0x1B6) break; // found it! - if(!i || !read_video_packet(d_video)){ - MSG_V("NONE :(\n"); - return 0; - } - } - pos = videobuf_len+4; - if(!read_video_packet(d_video)){ - MSG_ERR("Can't read Video Object Plane Header\n"); - return 0; - } - mp4_header_process_vop(&picture, &(videobuffer[pos])); - units[vop_cnt] = picture.timeinc_unit; - vop_cnt++; - //mp_msg(MSGT_DECVIDEO,MSGL_V, "TYPE: %d, unit: %d\n", picture.picture_type, picture.timeinc_unit); - if(!picture.fps) { - int i, mn, md, mx, diff; - if(vop_cnt < 3) - goto mp4_init; - - i=0; - mn = mx = units[0]; - for(i=0; i<3; i++) { - if(units[i] < mn) - mn = units[i]; - if(units[i] > mx) - mx = units[i]; - } - md = mn; - for(i=0; i<3; i++) { - if((units[i] > mn) && (units[i] < mx)) - md = units[i]; - } - MSG_V("MIN: %d, mid: %d, max: %d\n", mn, md, mx); - if(mx - md > md - mn) - diff = md - mn; - else - diff = mx - md; - if(diff > 0){ - picture.fps = (picture.timeinc_resolution * 10000) / diff; - MSG_V("FPS seems to be: %d/10000, resolution: %d, delta_units: %d\n", picture.fps, picture.timeinc_resolution, diff); - } - } - if(picture.fps) { - sh_video->fps=picture.fps*0.0001f; - MSG_INFO("FPS seems to be: %d/10000\n", picture.fps); - } - MSG_V("OK!\n"); - sh_video->fourcc=0x10000004; - break; - } - case VIDEO_H264: { - int pos = 0; - videobuf_len=0; videobuf_code_len=0; - MSG_V("Searching for sequence parameter set... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - if((i&~0x60) == 0x107 && i != 0x107) break; // found it! - if(!i || !skip_video_packet(d_video)){ - MSG_V("NONE :(\n"); - return 0; - } - } - MSG_V("OK!\n"); - if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; - if(!videobuffer){ - MSG_ERR(MSGTR_ShMemAllocFail); - return 0; - } - pos = videobuf_len+4; - if(!read_video_packet(d_video)){ - MSG_ERR("Can't read sequence parameter set\n"); - return 0; - } - h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos); - MSG_V("Searching for picture parameter set... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - MSG_V("H264: 0x%X\n",i); - if((i&~0x60) == 0x108 && i != 0x108) break; // found it! - if(!i || !read_video_packet(d_video)){ - MSG_V("NONE :(\n"); - return 0; - } - } - MSG_V("OK!\nSearching for Slice... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; // found it! - if(!i || !read_video_packet(d_video)){ - MSG_V("NONE :(\n"); - return 0; - } - } - MSG_V("OK!\n"); - sh_video->fourcc=0x10000005; - if(picture.fps) { - sh_video->fps=picture.fps*0.0001f; - MSG_INFO("FPS seems to be: %d/10000\n", picture.fps); - } - break; - } - case VIDEO_MPEG12: { -//mpeg_header_parser: - // Find sequence_header first: - videobuf_len=0; videobuf_code_len=0; - telecine=0; telecine_cnt=-2.5; - MSG_V("Searching for sequence header... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - if(i==0x1B3) break; // found it! - if(!i || !skip_video_packet(d_video)){ - MSG_V("NONE :(\n"); - MSG_ERR(MSGTR_MpegNoSequHdr); - return 0; - } - } - MSG_V("OK!\n"); -// sh_video=d_video->sh;sh_video->ds=d_video; -// mpeg2_init(); - // ========= Read & process sequence header & extension ============ - if(!videobuffer) videobuffer=new(alignmem,8) unsigned char[VIDEOBUFFER_SIZE]; - if(!videobuffer){ - MSG_ERR(MSGTR_ShMemAllocFail); - return 0; - } - - if(!read_video_packet(d_video)){ - MSG_ERR(MSGTR_CannotReadMpegSequHdr); - return 0; - } - if(mp_header_process_sequence_header (&picture, &videobuffer[4])) { - MSG_ERR(MSGTR_BadMpegSequHdr); - return 0; - } - if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext. -// videobuf_len=0; - int pos=videobuf_len; - if(!read_video_packet(d_video)){ - MSG_ERR(MSGTR_CannotReadMpegSequHdrEx); - return 0; - } - if(mp_header_process_extension (&picture, &videobuffer[pos+4])) { - MSG_ERR(MSGTR_BadMpegSequHdrEx); - return 0; - } - } - // fill aspect info: - switch(picture.aspect_ratio_information){ - case 2: // PAL/NTSC SVCD/DVD 4:3 - case 8: // PAL VCD 4:3 - case 12: // NTSC VCD 4:3 - sh_video->aspect=4.0/3.0; - break; - case 3: // PAL/NTSC Widescreen SVCD/DVD 16:9 - case 6: // (PAL?)/NTSC Widescreen SVCD 16:9 - sh_video->aspect=16.0/9.0; - break; - case 4: // according to ISO-138182-2 Table 6.3 - sh_video->aspect=2.21; - break; - case 9: // Movie Type ??? / 640x480 - sh_video->aspect=0.0; - break; - default: - MSG_ERR("Detected unknown aspect_ratio_information in mpeg sequence header.\n" - "Please report the aspect value (%i) along with the movie type (VGA,PAL,NTSC," - "SECAM) and the movie resolution (720x576,352x240,480x480,...) to the MPlayer" - " developers, so that we can add support for it!\nAssuming 1:1 aspect for now.\n", - picture.aspect_ratio_information); - case 1: // VGA 1:1 - do not prescale - sh_video->aspect=0.0; - break; - } - // fill aspect info: - sh_video->fourcc=picture.mpeg1?0x10000001:0x10000002; // mpeg video -#if 0 - if(picture.mpeg1) - sh_video->aspect=mpeg1_aspects[picture.aspect_ratio_information & 0x0F]; - else - sh_video->aspect=mpeg2_aspects[picture.aspect_ratio_information & 0x0F]; -#endif - // display info: - sh_video->fps=picture.fps*0.0001f; -#if 0 - sh_video->fps=mpeg_framerates[picture.frame_rate_code & 0x0F]; -#endif - sh_video->src_w=picture.display_picture_width; - sh_video->src_h=picture.display_picture_height; - // info: - MSG_DBG2("mpeg bitrate: %d (%X)\n",picture.bitrate,picture.bitrate); - MSG_V("VIDEO: %s %dx%d (aspect %d) %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", - picture.mpeg1?"MPEG1":"MPEG2", - sh_video->src_w,sh_video->src_h, - picture.aspect_ratio_information, - sh_video->fps, - picture.bitrate*0.5f, - picture.bitrate/16.0f ); - break; - } -} // switch(file_format) - -return 1; -} - -static void process_userdata(const unsigned char* buf,int len){ - int i; - /* if the user data starts with "CC", assume it is a Closed Captions info packet */ - if(len>2 && buf[0]=='C' && buf[1]=='C'){ - subcc_process_data(buf+2,len-2); - } - if( len > 2 && buf[ 0 ] == 'T' && buf[ 1 ] == 'Y' ) - { - ty_processuserdata( buf + 2, len - 2 ); - return; - } - MSG_V( "user_data: len=%3d %02X %02X %02X %02X '", - len, buf[0], buf[1], buf[2], buf[3]); - for(i=0;i<len;i++) - if(buf[i]>=32 && buf[i]<127) MSG_V("%c",buf[i]); - MSG_V("'\n"); -} - -int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,float *v_pts,unsigned char** start,int force_fps){ - Demuxer_Stream *d_video=sh_video->ds; - Demuxer *demuxer=d_video->demuxer; - float frame_time=1; - float pts1=d_video->pts; - int picture_coding_type=0; -// unsigned char* start=NULL; - int in_size=0; - - *start=NULL; - - if(demuxer->file_format==Demuxer::Type_MPEG_ES || - (demuxer->file_format==Demuxer::Type_MPEG_PS && ((! sh_video->fourcc) || (sh_video->fourcc==0x10000001) || (sh_video->fourcc==0x10000002))) - || demuxer->file_format==Demuxer::Type_PVA || - ((demuxer->file_format==Demuxer::Type_MPEG_TS) && ((sh_video->fourcc==0x10000001) || (sh_video->fourcc==0x10000002)))) - { - int in_frame=0; - //float newfps; - //videobuf_len=0; - while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ - int i=sync_video_packet(d_video); - //any_t* buffer=&videobuffer[videobuf_len+4]; - int __start=videobuf_len+4; - if(in_frame){ - if(i<0x101 || i>=0x1B0){ // not slice code -> end of frame -#if 1 - // send END OF FRAME code: - videobuffer[videobuf_len+0]=0; - videobuffer[videobuf_len+1]=0; - videobuffer[videobuf_len+2]=1; - videobuffer[videobuf_len+3]=0xFF; - videobuf_len+=4; -#endif - if(!i) return -1; // EOF - break; - } - } else { - //if(i==0x100) in_frame=1; // picture startcode - if(i>=0x101 && i<0x1B0) in_frame=1; // picture startcode - else if(!i) return -1; // EOF - } - if(!read_video_packet(d_video)) return -1; // EOF - // process headers: - switch(i){ - case 0x1B3: mp_header_process_sequence_header (&picture, &videobuffer[__start]);break; - case 0x1B5: mp_header_process_extension (&picture, &videobuffer[__start]);break; - case 0x1B2: process_userdata (&videobuffer[__start], videobuf_len-__start);break; - case 0x100: picture_coding_type=(videobuffer[__start+1] >> 3) & 7;break; - } - } - // if(videobuf_len>max_framesize) max_framesize=videobuf_len; // debug - *start=videobuffer; in_size=videobuf_len; - -#if 1 - // get mpeg fps: - //newfps=frameratecode2framerate[picture->frame_rate_code]*0.0001f; - if((int)(sh_video->fps*10000+0.5)!=picture.fps) if(!force_fps && !telecine){ - MSG_WARN("Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",sh_video->fps,picture.fps*0.0001,sh_video->fps-picture.fps*0.0001,picture.frame_rate_code); - sh_video->fps=picture.fps*0.0001; - } -#endif - - // fix mpeg2 frametime: - frame_time=(picture.display_time)*0.01f; - picture.display_time=100; - videobuf_len=0; - - telecine_cnt*=0.9; // drift out error - telecine_cnt+=frame_time-5.0/4.0; - MSG_DBG2("\r telecine = %3.1f %5.3f \n",frame_time,telecine_cnt); - - if(telecine){ - frame_time=1; - if(telecine_cnt<-1.5 || telecine_cnt>1.5){ - MSG_INFO("Leave telecine mode\n"); - telecine=0; - } - } else - if(telecine_cnt>-0.5 && telecine_cnt<0.5 && !force_fps){ - sh_video->fps=sh_video->fps*4/5; - MSG_INFO("Enter telecine mode\n"); - telecine=1; - } - - } else if((demuxer->file_format==Demuxer::Type_MPEG4_ES) || ((demuxer->file_format==Demuxer::Type_MPEG_TS) && (sh_video->fourcc==0x10000004)) || - ((demuxer->file_format==Demuxer::Type_MPEG_PS) && (sh_video->fourcc==0x10000004)) - ){ - // - while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ - int i=sync_video_packet(d_video); - if(!i) return -1; - if(!read_video_packet(d_video)) return -1; // EOF - if(i==0x1B6) break; - } - *start=videobuffer; in_size=videobuf_len; - videobuf_len=0; - - } else if(demuxer->file_format==Demuxer::Type_H264_ES || ((demuxer->file_format==Demuxer::Type_MPEG_TS) && (sh_video->fourcc==0x10000005)) || - ((demuxer->file_format==Demuxer::Type_MPEG_PS) && (sh_video->fourcc==0x10000005)) - ){ - // - while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ - int i=sync_video_packet(d_video); - int pos = videobuf_len+4; - if(!i) return -1; - if(!read_video_packet(d_video)) return -1; // EOF - if((i&~0x60) == 0x107 && i != 0x107) { - h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos); - if(picture.fps > 0) { - sh_video->fps=picture.fps*0.0001f; - } - i=sync_video_packet(d_video); - if(!i) return -1; - if(!read_video_packet(d_video)) return -1; // EOF - } - if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; - } - *start=videobuffer; in_size=videobuf_len; - videobuf_len=0; - } else { - /* frame-based file formats: (AVI,ASF,MOV) */ - in_size=d_video->get_packet(start); - if(in_size<0) return -1; // EOF - } - - // Increase video timers: - frame_time*=1.0f/sh_video->fps; - - /* override frame_time for variable/unknown FPS formats: */ - if(!force_fps) - switch(demuxer->file_format) - { - case Demuxer::Type_REAL: - case Demuxer::Type_MATROSKA: - if(d_video->pts>0 && pts1>0 && d_video->pts>pts1) - frame_time=d_video->pts-pts1; - break; - default: -#ifdef USE_TV - case Demuxer::Type_TV: -#endif - case Demuxer::Type_MOV: - case Demuxer::Type_FILM: - case Demuxer::Type_VIVO: - case Demuxer::Type_ASF: { - /* .ASF files has no fixed FPS - just frame durations! */ - float next_pts = d_video->get_next_pts(); - float d= next_pts > 0 ? next_pts - d_video->pts : d_video->pts-pts1; - if(d>=0){ - if(d>0) - if((int)sh_video->fps==1000) - MSG_STATUS("\rASF framerate: %d fps \n",(int)(1.0f/d)); - sh_video->fps=1.0f/d; - frame_time = d; - } else { - MSG_WARN("\nInvalid frame duration value (%2.5f/%2.5f => %5.3f). Defaulting to 1/25 sec.\n",d_video->pts,next_pts,frame_time); - frame_time = 1/25.0; - } - } - } - if(demuxer->file_format==Demuxer::Type_MPEG_PS || - demuxer->file_format==Demuxer::Type_MPEG_ES || - demuxer->file_format==Demuxer::Type_MPEG_TS) d_video->pts+=frame_time; - /* FIXUP VIDEO PTS*/ - if((demuxer->file_format == Demuxer::Type_MPEG_ES || - demuxer->file_format == Demuxer::Type_MPEG4_ES || - demuxer->file_format == Demuxer::Type_H264_ES || - demuxer->file_format == Demuxer::Type_MPEG_PS || - ((demuxer->file_format==Demuxer::Type_MPEG_TS) && ((sh_video->fourcc==0x10000001) || (sh_video->fourcc==0x10000002))) || - mp_conf.av_force_pts_fix) && mp_conf.av_sync_pts && mp_conf.av_force_pts_fix2!=1) - { - if(d_video->pts_flags && d_video->pts < 1.0 && d_video->prev_pts > 2.0) - { - float spts; - spts=d_video->demuxer->stream->stream_pts; - d_video->pts_corr=spts>0?spts:d_video->prev_pts; - d_video->pts_flags=0; - MSG_V("***PTS discontinuity happens*** correcting video %f pts as %f\n",d_video->pts,d_video->pts_corr); - } - if(d_video->pts>1.0) d_video->pts_flags=1; - if(!d_video->eof) d_video->prev_pts=d_video->pts+d_video->pts_corr; - *v_pts=d_video->prev_pts; - } - else *v_pts=d_video->pts; - - if(frame_time_ptr) *frame_time_ptr=frame_time; - return in_size; -} -} // namespace mpxp Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-04 16:36:42 UTC (rev 508) +++ mplayerxp/mplayerxp.cpp 2012-12-04 17:04:36 UTC (rev 509) @@ -1054,7 +1054,7 @@ sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); Demuxer_Stream *d_video=_demuxer->video; MP_UNIT("video_read_properties"); - if(!video_read_properties(sh_video)) { + if(!sh_video->read_properties()) { MSG_ERR("Video: can't read properties\n"); d_video->sh=NULL; sh_video=reinterpret_cast<sh_video_t*>(d_video->sh); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |