[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[656] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2013-06-20 09:16:35
|
Revision: 656 http://sourceforge.net/p/mplayerxp/code/656 Author: nickols_k Date: 2013-06-20 09:16:33 +0000 (Thu, 20 Jun 2013) Log Message: ----------- sync with beye Modified Paths: -------------- mplayerxp/dump.cpp mplayerxp/libmpdemux/demux_aiff.cpp mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_avi.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpstream2/cache2.cpp mplayerxp/xmpcore/binary_packet.cpp mplayerxp/xmpcore/binary_packet.h Modified: mplayerxp/dump.cpp =================================================================== --- mplayerxp/dump.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/dump.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -66,7 +66,7 @@ mpxp_info<<"Dumping stream to "<<name<<std::endl; while(!stream->eof()){ binary_packet bp=stream->read(4096); - if(bp.size()>0) f.write(bp.cdata(),bp.size()); + if(bp.size()>0) f<<bp; } f.close(); mpxp_info<<MSGTR_StreamDumped<<std::endl; Modified: mplayerxp/libmpdemux/demux_aiff.cpp =================================================================== --- mplayerxp/libmpdemux/demux_aiff.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/libmpdemux/demux_aiff.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -147,7 +147,7 @@ bp=s->read(chunk_size); bp.resize(bp.size()+1); bp[chunk_size]=0; - demuxer->info().add(INFOT_NAME, bp.cdata()); + demuxer->info().add(INFOT_NAME, (const char*)bp.data()); if(priv->verc && (chunk_size&1)) s->read(type_byte); } else @@ -156,7 +156,7 @@ bp=s->read(chunk_size); bp.resize(bp.size()+1); bp[chunk_size]=0; - demuxer->info().add(INFOT_AUTHOR, bp.cdata()); + demuxer->info().add(INFOT_AUTHOR, (const char*)bp.data()); if(priv->verc && (chunk_size&1)) s->read(type_byte); } else @@ -165,7 +165,7 @@ bp=s->read(chunk_size); bp.resize(bp.size()+1); bp[chunk_size]=0; - demuxer->info().add(INFOT_COPYRIGHT, bp.cdata()); + demuxer->info().add(INFOT_COPYRIGHT, (const char*)bp.data()); if(priv->verc && (chunk_size&1)) s->read(type_byte); } else @@ -174,7 +174,7 @@ bp=s->read(chunk_size); bp.resize(bp.size()+1); bp[chunk_size]=0; - demuxer->info().add(INFOT_DESCRIPTION, bp.cdata()); + demuxer->info().add(INFOT_DESCRIPTION,(const char*)bp.data()); if(priv->verc && (chunk_size&1)) s->read(type_byte); } else Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/libmpdemux/demux_asf.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -64,13 +64,14 @@ }; // the variable string is modify in this function -void pack_asf_string(char* string, int length) { - int i,j; - if( string==NULL ) return; - for( i=0, j=0; i<length && string[i]!='\0'; i+=2, j++) { - string[j]=string[i]; - } - string[j]='\0'; +std::string pack_asf_string(const char* string, size_t length) { + std::string rc; + size_t i; + if( string==NULL ) return rc; + for( i=0; i<length && string[i]!='\0'; i+=2) { + rc.append(1,string[i]); + } + return rc; } // the variable string is modify in this function @@ -253,32 +254,27 @@ // extract the title if( apriv->contenth.title_size!=0 ) { bp=demuxer->stream->read(apriv->contenth.title_size); - pack_asf_string(bp.cdata(), bp.size()); - demuxer->info().add(INFOT_NAME, bp.cdata()); + demuxer->info().add(INFOT_NAME, pack_asf_string((const char*)bp.data(), bp.size()).c_str()); } // extract the author if( apriv->contenth.author_size!=0 ) { bp=demuxer->stream->read(apriv->contenth.author_size); - pack_asf_string(bp.cdata(),bp.size()); - demuxer->info().add(INFOT_AUTHOR, bp.cdata()); + demuxer->info().add(INFOT_AUTHOR, pack_asf_string((const char*)bp.data(), bp.size()).c_str()); } // extract the copyright if( apriv->contenth.copyright_size!=0 ) { bp=demuxer->stream->read(apriv->contenth.copyright_size); - pack_asf_string(bp.cdata(), bp.size()); - demuxer->info().add(INFOT_COPYRIGHT, bp.cdata()); + demuxer->info().add(INFOT_COPYRIGHT, pack_asf_string((const char*)bp.data(), bp.size()).c_str()); } // extract the comment if( apriv->contenth.comment_size!=0 ) { bp=demuxer->stream->read(apriv->contenth.comment_size); - pack_asf_string(bp.cdata(), bp.size()); - demuxer->info().add(INFOT_COMMENTS, bp.cdata()); + demuxer->info().add(INFOT_COMMENTS, pack_asf_string((const char*)bp.data(), bp.size()).c_str()); } // extract the rating if( apriv->contenth.rating_size!=0 ) { bp=demuxer->stream->read(apriv->contenth.rating_size); - pack_asf_string(bp.cdata(), bp.size()); - demuxer->info().add(INFOT_RATING, bp.cdata()); + demuxer->info().add(INFOT_RATING, pack_asf_string((const char*)bp.data(), bp.size()).c_str()); } MSG_V("\n"); break; @@ -286,12 +282,13 @@ case ASF_GUID_PREFIX_stream_group: { uint16_t stream_id, i; uint32_t max_bitrate; - char *object=NULL, *ptr=NULL; + char *object=NULL; + const char *ptr=NULL; MSG_V("============ ASF Stream group == START ===\n"); MSG_V(" object size = %d\n", (int)apriv->objh.size); bp=demuxer->stream->read(apriv->objh.size ); // FIXME: We need some endian handling below... - ptr = bp.cdata(); + ptr = (const char*)bp.data(); stream_count = le2me_16(*(uint16_t*)ptr); ptr += sizeof(uint16_t); if(stream_count > 0) streams = new uint32_t[2*stream_count]; Modified: mplayerxp/libmpdemux/demux_avi.cpp =================================================================== --- mplayerxp/libmpdemux/demux_avi.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/libmpdemux/demux_avi.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -482,9 +482,9 @@ chunksize-=len; bp.resize(bp.size()+1); bp.cdata()[len]=0; - MSG_V("%-10s: %s\n",hdr,bp.cdata()); - if(infot!=-1) demuxer->info().add(infot, bp.cdata()); - else MSG_V(" %s: %s\n",hdr,bp.cdata()); + MSG_V("%-10s: %s\n",hdr,(const char*)bp.data()); + if(infot!=-1) demuxer->info().add(infot, (const char*)bp.data()); + else MSG_V(" %s: %s\n",hdr,(const char*)bp.data()); } } MSG_DBG2("list_end=0x%X pos=0x%X chunksize=0x%X next=0x%X\n", Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -411,7 +411,7 @@ { binary_packet bp=s->read(len); sub_data.cp=nls_get_screen_cp(mpxp_get_environment()); - demuxer->info().add(infot,nls_recode2screen_cp(codepage,bp.cdata(),bp.size())); + demuxer->info().add(infot,nls_recode2screen_cp(codepage,(const char*)bp.data(),bp.size())); } else s->skip(len); } Modified: mplayerxp/libmpstream2/cache2.cpp =================================================================== --- mplayerxp/libmpstream2/cache2.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/libmpstream2/cache2.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -402,7 +402,7 @@ static binary_packet __FASTCALL__ c2_stream_read(cache_vars_t* c,size_t total){ binary_packet rc(total); int len=total,eof,mlen; - char *mem=rc.cdata(); + uint8_t *mem=rc.cdata(); unsigned buf_pos; unsigned cur,i,npackets; Modified: mplayerxp/xmpcore/binary_packet.cpp =================================================================== --- mplayerxp/xmpcore/binary_packet.cpp 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/xmpcore/binary_packet.cpp 2013-06-20 09:16:33 UTC (rev 656) @@ -1,9 +1,9 @@ #include "mpxp_config.h" #include "osdep/mplib.h" using namespace usr; -#include <stdexcept> +#include <stdint.h> +#include <stdlib.h> #include <string.h> - #include "binary_packet.h" namespace usr { @@ -20,7 +20,7 @@ { if(from.len) { buffer=new char[from.len]; - ::memcpy(buffer,from.buffer,len); + memcpy(buffer,from.buffer,len); } } @@ -30,7 +30,7 @@ { if(sz) { buffer=new char[sz]; - ::memcpy(buffer,src,sz); + memcpy(buffer,src,sz); } } @@ -42,7 +42,7 @@ len=sz; if(sz) { buffer = new char[sz]; - ::memcpy(buffer,_data,sz); + memcpy(buffer,_data,sz); } return *this; } @@ -50,7 +50,7 @@ binary_packet& binary_packet::append(const any_t* _data,size_t sz) { if(sz) { buffer = mp_realloc(buffer,len+sz); - ::memcpy(&((char*)buffer)[len],_data,sz); + memcpy(&((char*)buffer)[len],_data,sz); } len+=sz; return *this; @@ -58,6 +58,40 @@ binary_packet& binary_packet::append(const binary_packet& it) { return append(it.buffer,it.len); } +binary_packet& binary_packet::insert(size_t pos,const any_t* sdata,size_t slen) { + resize(len+slen); + memmove(&((uint8_t*)buffer)[pos+slen],&((uint8_t*)buffer)[pos],slen); + memcpy(&((uint8_t*)buffer)[pos],sdata,slen); + return *this; +} + +binary_packet& binary_packet::insert(size_t pos,const binary_packet& it) { return insert(pos,it.buffer,it.len); } + +binary_packet& binary_packet::replace(size_t pos,const any_t* sdata,size_t slen) { + if(pos+slen>len) { + std::ostringstream os; + os<<"."<<get_caller_address()<<" => binary_packet::replace("<<pos<<","<<slen<<")"; + throw std::out_of_range(os.str()); + } + memcpy(&((uint8_t*)buffer)[pos],sdata,slen); + return *this; +} + +binary_packet& binary_packet::replace(size_t pos,const binary_packet& it) { return replace(pos,it.buffer,it.len); } + +binary_packet& binary_packet::remove(size_t pos,size_t n) { + if(pos+n==len) resize(len-n); + else if(pos+n<len){ + memmove(&((uint8_t*)buffer)[pos],&((uint8_t*)buffer)[pos+n],n); + resize(len-n); + } else { + std::ostringstream os; + os<<"."<<get_caller_address()<<" => binary_packet::remove("<<pos<<","<<n<<")"; + throw std::out_of_range(os.str()); + } + return *this; +} + binary_packet binary_packet::operator+(const binary_packet& rhs) const { binary_packet rc(len+rhs.len); ::memcpy(rc.buffer,buffer,len); @@ -75,56 +109,74 @@ return *this; } -char& binary_packet::operator[](size_t idx) { return at(idx); } -const char& binary_packet::operator[](size_t idx) const { return at(idx); } +uint8_t& binary_packet::operator[](size_t idx) { return at(idx); } +const uint8_t& binary_packet::operator[](size_t idx) const { return at(idx); } - bool binary_packet::operator==(const binary_packet& from) const { - if(len==from.len) return ::memcmp(buffer,from.buffer,len)==0; + if(len==from.len) return memcmp(buffer,from.buffer,len)==0; return false; } bool binary_packet::operator!=(const binary_packet& from) const { - if(len==from.len) return ::memcmp(buffer,from.buffer,len)!=0; + if(len==from.len) return memcmp(buffer,from.buffer,len)!=0; return true; } bool binary_packet::operator<(const binary_packet& from) const { - if(len==from.len) return ::memcmp(buffer,from.buffer,len)<0; + if(len==from.len) return memcmp(buffer,from.buffer,len)<0; return len<from.len; } bool binary_packet::operator<=(const binary_packet& from) const { - if(len==from.len) return ::memcmp(buffer,from.buffer,len)<=0; + if(len==from.len) return memcmp(buffer,from.buffer,len)<=0; return len<from.len; } bool binary_packet::operator>(const binary_packet& from) const { - if(len==from.len) return ::memcmp(buffer,from.buffer,len)>0; + if(len==from.len) return memcmp(buffer,from.buffer,len)>0; return len>from.len; } bool binary_packet::operator>=(const binary_packet& from) const { - if(len==from.len) return ::memcmp(buffer,from.buffer,len)>=0; + if(len==from.len) return memcmp(buffer,from.buffer,len)>=0; return len>from.len; } -char& binary_packet::front() { return ((char*)buffer)[0]; } -const char& binary_packet::front() const { return ((const char*)buffer)[0]; } -char& binary_packet::back() { return ((char*)buffer)[len-1]; } -const char& binary_packet::back() const { return ((const char*)buffer)[len-1]; } +uint8_t& binary_packet::front() { return ((uint8_t*)buffer)[0]; } +const uint8_t& binary_packet::front() const { return ((const uint8_t*)buffer)[0]; } +uint8_t& binary_packet::back() { return ((uint8_t*)buffer)[len-1]; } +const uint8_t& binary_packet::back() const { return ((const uint8_t*)buffer)[len-1]; } -char& binary_packet::at(size_t idx) { - if(idx<len) return ((char*)buffer)[idx]; - throw std::out_of_range("binary_packet.at"); +uint8_t& binary_packet::at(size_t idx) { + if(idx<len) return ((uint8_t*)buffer)[idx]; + std::ostringstream os; + os<<"."<<get_caller_address()<<" => binary_packet::at("<<idx<<")"; + throw std::out_of_range(os.str()); } -const char& binary_packet::at(size_t idx) const { - if(idx<len) return ((const char*)buffer)[idx]; - throw std::out_of_range("binary_packet.at const"); +const uint8_t& binary_packet::at(size_t idx) const { + if(idx<len) return ((const uint8_t*)buffer)[idx]; + std::ostringstream os; + os<<"."<<get_caller_address()<<" => binary_packet::at("<<idx<<")"; + throw std::out_of_range(os.str()); } binary_packet binary_packet::subpacket(size_t start,size_t length) const { - if(start+length>len) throw std::out_of_range("binary_packet.subpacket"); + if(start+length>len) { + std::ostringstream os; + os<<"."<<get_caller_address()<<" => binary_packet::subpacket("<<start<<","<<length<<")"; + throw std::out_of_range(os.str()); + } binary_packet rc(length); - ::memcpy(rc.buffer,&((char*)buffer)[start],length); + memcpy(rc.buffer,&((char*)buffer)[start],length); return rc; } +std::ostream& operator<<(std::ostream& os,const binary_packet& bp) { + os.write((const char*)bp.data(),bp.size()); + return os; +} + +std::istream& operator>>(std::istream& is,binary_packet& bp) { + bp.resize(is.width()); + is.read((char*)bp.data(),bp.size()); + return is; +} + binary_packet::~binary_packet() { if(buffer) delete (char*)buffer; } } // namespace usr Modified: mplayerxp/xmpcore/binary_packet.h =================================================================== --- mplayerxp/xmpcore/binary_packet.h 2013-06-14 21:51:03 UTC (rev 655) +++ mplayerxp/xmpcore/binary_packet.h 2013-06-20 09:16:33 UTC (rev 656) @@ -1,6 +1,9 @@ #ifndef BINARY_PACKET_HPP_INCLUDED #define BINARY_PACKET_HPP_INCLUDED 1 #include "osdep/mplib.h" +#include <iostream> +#include <sstream> +#include <stdexcept> namespace usr { class binary_packet : public Opaque { @@ -13,8 +16,8 @@ binary_packet& operator=(const binary_packet& from); binary_packet& operator+=(const binary_packet& from); binary_packet operator+(const binary_packet& rhs) const; - char& operator[](size_t idx); - const char& operator[](size_t idx) const; + uint8_t& operator[](size_t idx); + const uint8_t& operator[](size_t idx) const; bool operator==(const binary_packet& from) const; bool operator!=(const binary_packet& from) const; @@ -26,12 +29,17 @@ virtual binary_packet& assign(const any_t* data,size_t len); virtual binary_packet& append(const any_t* data,size_t len); virtual binary_packet& append(const binary_packet& it); - virtual char& at(size_t idx); - virtual const char& at(size_t idx) const; - virtual char& front(); - virtual const char& front() const; - virtual char& back(); - virtual const char& back() const; + virtual binary_packet& insert(size_t pos,const any_t* data,size_t len); + virtual binary_packet& insert(size_t pos,const binary_packet& it); + virtual binary_packet& replace(size_t pos,const any_t* data,size_t len); + virtual binary_packet& replace(size_t pos,const binary_packet& it); + virtual binary_packet& remove(size_t pos,size_t n); + virtual uint8_t& at(size_t idx); + virtual const uint8_t& at(size_t idx) const; + virtual uint8_t& front(); + virtual const uint8_t& front() const; + virtual uint8_t& back(); + virtual const uint8_t& back() const; virtual binary_packet subpacket(size_t start,size_t length) const; @@ -41,11 +49,40 @@ virtual size_t size() const { return len; } virtual any_t* data() { return buffer; } virtual const any_t* data() const { return buffer; } - virtual char* cdata() { return (char*)buffer; } - virtual const char* cdata() const { return (char*)buffer; } + virtual uint8_t* cdata() { return (uint8_t*)buffer; } + virtual const uint8_t* cdata() const { return (uint8_t*)buffer; } private: any_t* buffer; size_t len; }; + + std::ostream& operator<<(std::ostream& os,const binary_packet&); + std::istream& operator>>(std::istream& is,binary_packet&); // use std::setw() or istream.width() before using this operator + + template<class T> + class objects_container : public binary_packet { + public: + objects_container(size_t sz):binary_packet(sz) {} + objects_container(const any_t* src,size_t sz):binary_packet(src,sz) {} + objects_container(const objects_container& from):binary_packet(from) {} + virtual ~objects_container() {} + + T& operator[](size_t idx) { + if((idx+1)*sizeof(T)<=size()) return ((T*)data())[idx]; + std::ostringstream os; + os<<"."<<get_caller_address()<<" => object_container["<<idx<<"]"; + throw std::out_of_range(os.str()); + } + + const T& operator[](size_t idx) const { + if((idx+1)*sizeof(T)<=size()) return ((const T*)data())[idx]; + std::ostringstream os; + os<<"."<<get_caller_address()<<" => object_container["<<idx<<"] const"; + throw std::out_of_range(os.str()); + } + + virtual T* tdata() { return (T*)data(); } + virtual const T* tdata() const { return (const T*)data(); } + }; } // namespace usr #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |