[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[649] mplayerxp
Brought to you by:
olov
|
From: <nic...@us...> - 2013-06-08 14:04:16
|
Revision: 649
http://sourceforge.net/p/mplayerxp/code/649
Author: nickols_k
Date: 2013-06-08 14:04:10 +0000 (Sat, 08 Jun 2013)
Log Message:
-----------
import idea of binary_packet from beye
Modified Paths:
--------------
mplayerxp/dump.cpp
mplayerxp/libmpdemux/demux_ac3.cpp
mplayerxp/libmpdemux/demux_aiff.cpp
mplayerxp/libmpdemux/demux_asf.cpp
mplayerxp/libmpdemux/demux_avi.cpp
mplayerxp/libmpdemux/demux_bmp.cpp
mplayerxp/libmpdemux/demux_dca.cpp
mplayerxp/libmpdemux/demux_film.cpp
mplayerxp/libmpdemux/demux_flac.cpp
mplayerxp/libmpdemux/demux_fli.cpp
mplayerxp/libmpdemux/demux_lavf.cpp
mplayerxp/libmpdemux/demux_mkv.cpp
mplayerxp/libmpdemux/demux_mov.cpp
mplayerxp/libmpdemux/demux_mp3.cpp
mplayerxp/libmpdemux/demux_mpg.cpp
mplayerxp/libmpdemux/demux_mpxp64.cpp
mplayerxp/libmpdemux/demux_musepack.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_real.cpp
mplayerxp/libmpdemux/demux_realaud.cpp
mplayerxp/libmpdemux/demux_roq.cpp
mplayerxp/libmpdemux/demux_smjpeg.cpp
mplayerxp/libmpdemux/demux_snd_au.cpp
mplayerxp/libmpdemux/demux_ts.cpp
mplayerxp/libmpdemux/demux_ty.cpp
mplayerxp/libmpdemux/demux_viv.cpp
mplayerxp/libmpdemux/demux_voc.cpp
mplayerxp/libmpdemux/demux_vqf.cpp
mplayerxp/libmpdemux/demux_wav.cpp
mplayerxp/libmpdemux/demux_y4m.cpp
mplayerxp/libmpdemux/demuxer_r.cpp
mplayerxp/libmpdemux/demuxer_stream.cpp
mplayerxp/libmpdemux/mp3_hdr.cpp
mplayerxp/libmpdemux/mp3_hdr.h
mplayerxp/libmpdemux/mpeg_hdr.cpp
mplayerxp/libmpdemux/mux_mpxp64.cpp
mplayerxp/libmpdemux/parse_mp4.cpp
mplayerxp/libmpdemux/yuv4mpeg.cpp
mplayerxp/libmpstream2/cache2.cpp
mplayerxp/libmpstream2/stream.cpp
mplayerxp/libmpstream2/stream.h
mplayerxp/libmpsub/vobsub.cpp
mplayerxp/libplaytree2/playtreeparser.cpp
mplayerxp/xmpcore/Makefile
Added Paths:
-----------
mplayerxp/xmpcore/binary_packet.cpp
mplayerxp/xmpcore/binary_packet.h
Modified: mplayerxp/dump.cpp
===================================================================
--- mplayerxp/dump.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/dump.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -41,7 +41,6 @@
void dump_stream(Stream *stream)
{
char buf[4096];
- int len;
std::ofstream f;
const char *ext,*name;
MP_UNIT("dumpstream");
@@ -65,8 +64,8 @@
}
MSG_INFO("Dumping stream to %s\n",name);
while(!stream->eof()){
- len=stream->read(buf,4096);
- if(len>0) f.write(buf,len);
+ binary_packet bp=stream->read(4096);
+ if(bp.size()>0) f.write(bp.cdata(),bp.size());
}
f.close();
mpxp_info<<MSGTR_StreamDumped<<std::endl;
Modified: mplayerxp/libmpdemux/demux_ac3.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_ac3.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_ac3.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -141,39 +141,38 @@
demuxer->movi_end = s->end_pos();
memcpy(b,hdr,4);
s->seek(pos+4);
- s->read(&b[4],4);
+ binary_packet bp=s->read(4);
+ memcpy(&b[4],bp.data(),bp.size());
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;
+ 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;
+ bp=s->read(8);
+ memcpy(b,bp.data(),bp.size());
+ 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;
+ uint32_t fcc,fcc1;
+ uint8_t *p;
+ 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);
+ binary_packet bp=s->read(32);
+ /* ac3 header check */
+ if(ac3_decode_header((const uint8_t*)bp.data(),samplerate,brate,channels)>0) return 1;
+ s->seek(fptr);
+ return 0;
}
static MPXP_Rc ac3_probe(Demuxer* demuxer)
@@ -213,7 +212,8 @@
step = 1;
if(pos < HDR_SIZE) {
- s->read(&hdr[pos],HDR_SIZE-pos);
+ binary_packet bp=s->read(HDR_SIZE-pos);
+ memcpy(&hdr[pos],bp.data(),bp.size());
pos = HDR_SIZE;
}
@@ -224,7 +224,8 @@
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);
+ binary_packet bp=s->read(12-HDR_SIZE);
+ memcpy(&b[HDR_SIZE],bp.data(),bp.size());
if((n = ac3_decode_header(b,&fmt,&fmt,&fmt)) > 0) {
demuxer->movi_start = st_pos;
break;
@@ -294,11 +295,10 @@
}
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);
+ binary_packet hdr=s->read(8);
+ len = ac3_decode_header((const uint8_t*)hdr.data(),&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) {
@@ -309,9 +309,11 @@
if(len>8)
{
Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len);
- memcpy(dp->buffer(),hdr,8);
+ memcpy(dp->buffer(),hdr.data(),hdr.size());
dp->resize(len+8);
- len=s->read(dp->buffer()+8,len-8);
+ binary_packet bp=s->read(len-8);
+ len=bp.size();
+ memcpy(dp->buffer()+8,bp.data(),bp.size());
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;
@@ -325,25 +327,24 @@
}
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;
+ 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;
+ nf = _time*sh->rate/1152;
+ while(nf > 0) {
+ binary_packet bp = demuxer->stream->read(8);
+ MSG_DBG2("high_res_mp3_seek\n");
+ len = ac3_decode_header((const uint8_t*)bp.data(),&tmp,&tmp,&tmp);
+ if(len < 0) {
+ demuxer->stream->skip(-7);
+ continue;
+ }
+ demuxer->stream->skip(len-8);
+ priv->last_pts += 1152/(float)sh->rate;
+ nf--;
}
- demuxer->stream->skip(len-8);
- priv->last_pts += 1152/(float)sh->rate;
- nf--;
- }
}
static void ac3_seek(Demuxer *demuxer,const seek_args_t* seeka){
Modified: mplayerxp/libmpdemux/demux_aiff.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_aiff.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_aiff.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -42,13 +42,14 @@
static MPXP_Rc aiff_probe(Demuxer* demuxer)
{
- char buf[12];
- Stream *s;
- s = demuxer->stream;
- 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;
+ char buf[12];
+ Stream *s;
+ s = demuxer->stream;
+ binary_packet bp=s->read(12);
+ memcpy(buf,bp.data(),bp.size());
+ 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;
}
static Opaque* aiff_open(Demuxer* demuxer) {
@@ -72,14 +73,18 @@
w->cbSize = 0;
s->reset();
s->seek(8);
- if(s->read(preamble,4)!=4) return NULL;
+ binary_packet bp=s->read(4);
+ if(bp.size()!=4) return NULL;
+ memcpy(preamble,bp.data(),bp.size());
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(s->read(preamble,8)!=8) break;
+ unsigned chunk_size;
+ bp=s->read(8);
+ if(bp.size()!=8) return NULL;
+ memcpy(preamble,bp.data(),bp.size());
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 +94,9 @@
MSG_V("Wrong length of VFER chunk %lu\n",be2me_32(*((uint32_t *)&preamble[4])));
return NULL;
}
- if(s->read(preamble,4)!=4) return NULL;
+ bp=s->read(4);
+ if(bp.size()!=4) return NULL;
+ memcpy(preamble,bp.data(),bp.size());
if(be2me_32(*((uint32_t *)&preamble[0])) == 0xA2805140) priv->verc=1;
else
{
@@ -102,12 +109,13 @@
{
char buf[chunk_size];
unsigned clen=priv->verc?22:18;
- if(chunk_size < clen)
- {
+ if(chunk_size < clen) {
MSG_V("Invalid COMM length %u\n",chunk_size);
return NULL;
}
- if(s->read(buf,chunk_size)!=chunk_size) return NULL;
+ bp=s->read(chunk_size);
+ if(bp.size()!=chunk_size) return NULL;
+ memcpy(buf,bp.data(),bp.size());
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]));
@@ -136,37 +144,37 @@
else
if(*((uint32_t *)&preamble[0])==mmioFOURCC('N','A','M','E'))
{
- char buf[chunk_size+1];
- s->read(buf,chunk_size);
- buf[chunk_size]=0;
- demuxer->info().add(INFOT_NAME, buf);
+ bp=s->read(chunk_size);
+ bp.resize(bp.size()+1);
+ bp[chunk_size]=0;
+ demuxer->info().add(INFOT_NAME, bp.cdata());
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];
- s->read(buf,chunk_size);
- buf[chunk_size]=0;
- demuxer->info().add(INFOT_AUTHOR, buf);
+ bp=s->read(chunk_size);
+ bp.resize(bp.size()+1);
+ bp[chunk_size]=0;
+ demuxer->info().add(INFOT_AUTHOR, bp.cdata());
if(priv->verc && (chunk_size&1)) s->read_char();
}
else
if(*((uint32_t *)&preamble[0])==mmioFOURCC('(','c',')',' '))
{
- char buf[chunk_size+1];
- s->read(buf,chunk_size);
- buf[chunk_size]=0;
- demuxer->info().add(INFOT_COPYRIGHT, buf);
+ bp=s->read(chunk_size);
+ bp.resize(bp.size()+1);
+ bp[chunk_size]=0;
+ demuxer->info().add(INFOT_COPYRIGHT, bp.cdata());
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];
- s->read(buf,chunk_size);
- buf[chunk_size]=0;
- demuxer->info().add(INFOT_DESCRIPTION, buf);
+ bp=s->read(chunk_size);
+ bp.resize(bp.size()+1);
+ bp[chunk_size]=0;
+ demuxer->info().add(INFOT_DESCRIPTION, bp.cdata());
if(priv->verc && (chunk_size&1)) s->read_char();
}
else
@@ -185,23 +193,24 @@
}
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 = demuxer->stream->tell();
+ sh_audio_t* sh_audio = reinterpret_cast<sh_audio_t*>(demuxer->audio->sh);
+ int l = sh_audio->wf->nAvgBytesPerSec;
+ off_t spos = demuxer->stream->tell();
- if(demuxer->stream->eof())
- return 0;
+ if(demuxer->stream->eof()) return 0;
- Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(l);
- dp->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec);
- dp->pos = spos;
- dp->flags = DP_NONKEYFRAME;
+ Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(l);
+ dp->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec);
+ dp->pos = spos;
+ dp->flags = DP_NONKEYFRAME;
- l=demuxer->stream->read(dp->buffer(),l);
- dp->resize(l);
- ds->add_packet(dp);
+ binary_packet bp=demuxer->stream->read(l);
+ l=bp.size();
+ memcpy(dp->buffer(),bp.data(),l);
+ dp->resize(l);
+ ds->add_packet(dp);
- return 1;
+ return 1;
}
static void aiff_seek(Demuxer *demuxer,const seek_args_t* seeka){
Modified: mplayerxp/libmpdemux/demux_asf.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_asf.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_asf.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -133,7 +133,8 @@
apriv->asf_packetrate=0;
apriv->asf_movielength=0;
- demuxer->stream->read((char*)&apriv->asfh,sizeof(ASF_header_t)); // header obj
+ binary_packet bp=demuxer->stream->read(sizeof(ASF_header_t)); // header obj
+ memcpy((char*)&apriv->asfh,bp.data(),bp.size());
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");
@@ -155,25 +156,27 @@
}
static Opaque* asf_open(Demuxer *demuxer){
- static unsigned char buffer[2048];
- uint32_t* streams = NULL;
- int audio_streams=0;
- int video_streams=0;
- uint16_t stream_count=0;
- int best_video = -1;
- int best_audio = -1;
- asf_priv_t *apriv=static_cast<asf_priv_t*>(demuxer->priv);
+ binary_packet bp(1);
+ uint32_t* streams = NULL;
+ int audio_streams=0;
+ int video_streams=0;
+ uint16_t stream_count=0;
+ int best_video = -1;
+ int best_audio = -1;
+ asf_priv_t *apriv=static_cast<asf_priv_t*>(demuxer->priv);
while(!demuxer->stream->eof()){
- int pos,endpos;
- pos=demuxer->stream->tell();
- demuxer->stream->read((char*) &apriv->objh,sizeof(ASF_obj_header_t));
- le2me_ASF_obj_header_t(&apriv->objh);
- if(demuxer->stream->eof()) break; // EOF
- endpos=pos+apriv->objh.size;
- switch(ASF_LOAD_GUID_PREFIX(apriv->objh.guid)){
+ int pos,endpos;
+ pos=demuxer->stream->tell();
+ bp=demuxer->stream->read(sizeof(ASF_obj_header_t));
+ memcpy(&apriv->objh,bp.data(),bp.size());
+ le2me_ASF_obj_header_t(&apriv->objh);
+ 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:
- demuxer->stream->read((char*) &apriv->streamh,sizeof(ASF_stream_header_t));
+ bp=demuxer->stream->read(sizeof(ASF_stream_header_t));
+ memcpy(&apriv->streamh,bp.data(),bp.size());
le2me_ASF_stream_header_t(&apriv->streamh);
MSG_V("stream type: %s\n"
"stream concealment: %s\n"
@@ -186,20 +189,20 @@
,(unsigned long)apriv->streamh.unk1,(unsigned int)apriv->streamh.unk2
,demuxer->stream->tell());
// type-specific data:
- demuxer->stream->read((char*) buffer,apriv->streamh.type_size);
+ bp=demuxer->stream->read(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);
++audio_streams;
sh_audio->wf=(WAVEFORMATEX*)mp_calloc((apriv->streamh.type_size<sizeof(WAVEFORMATEX))?sizeof(WAVEFORMATEX):apriv->streamh.type_size,1);
- memcpy(sh_audio->wf,buffer,apriv->streamh.type_size);
+ memcpy(sh_audio->wf,bp.data(),bp.size());
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){
- 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];
+ bp=demuxer->stream->read(apriv->streamh.stream_size);
+ apriv->asf_scrambling_h=bp.cdata()[0];
+ apriv->asf_scrambling_w=(bp.cdata()[2]<<8)|bp.cdata()[1];
+ apriv->asf_scrambling_b=(bp.cdata()[4]<<8)|bp.cdata()[3];
apriv->asf_scrambling_w/=apriv->asf_scrambling_b;
} else {
apriv->asf_scrambling_b=apriv->asf_scrambling_h=apriv->asf_scrambling_w=1;
@@ -212,7 +215,7 @@
unsigned int len=apriv->streamh.type_size-(4+4+1+2);
++video_streams;
sh_video->bih=(BITMAPINFOHEADER*)mp_mallocz(len<sizeof(BITMAPINFOHEADER)?sizeof(BITMAPINFOHEADER):len);
- memcpy(sh_video->bih,&buffer[4+4+1+2],len);
+ memcpy(sh_video->bih,&bp.cdata()[4+4+1+2],len);
le2me_BITMAPINFOHEADER(sh_video->bih);
if(mp_conf.verbose>=1) print_video_header(sh_video->bih,len);
break;
@@ -222,7 +225,8 @@
break;
// case ASF_GUID_PREFIX_header_2_0: return "guid_header_2_0";
case ASF_GUID_PREFIX_file_header: // guid_file_header
- demuxer->stream->read((char*) &apriv->fileh,sizeof(ASF_file_header_t));
+ bp=demuxer->stream->read(sizeof(ASF_file_header_t));
+ memcpy((char*) &apriv->fileh,bp.data(),bp.size());
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,
@@ -242,49 +246,39 @@
case ASF_GUID_PREFIX_content_desc: // Content description
{
- char *string=NULL;
- demuxer->stream->read((char*) &apriv->contenth,sizeof(ASF_content_description_t));
+ bp=demuxer->stream->read(sizeof(ASF_content_description_t));
+ memcpy((char*) &apriv->contenth,bp.data(),bp.size());
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];
- demuxer->stream->read( string, apriv->contenth.title_size);
- pack_asf_string(string, apriv->contenth.title_size);
- demuxer->info().add(INFOT_NAME, string);
- delete string;
+ bp=demuxer->stream->read(apriv->contenth.title_size);
+ pack_asf_string(bp.cdata(), bp.size());
+ demuxer->info().add(INFOT_NAME, bp.cdata());
}
// extract the author
if( apriv->contenth.author_size!=0 ) {
- string=new char [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;
+ bp=demuxer->stream->read(apriv->contenth.author_size);
+ pack_asf_string(bp.cdata(),bp.size());
+ demuxer->info().add(INFOT_AUTHOR, bp.cdata());
}
// extract the copyright
if( apriv->contenth.copyright_size!=0 ) {
- string=new char [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;
+ bp=demuxer->stream->read(apriv->contenth.copyright_size);
+ pack_asf_string(bp.cdata(), bp.size());
+ demuxer->info().add(INFOT_COPYRIGHT, bp.cdata());
}
// extract the comment
if( apriv->contenth.comment_size!=0 ) {
- string=new char [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;
+ bp=demuxer->stream->read(apriv->contenth.comment_size);
+ pack_asf_string(bp.cdata(), bp.size());
+ demuxer->info().add(INFOT_COMMENTS, bp.cdata());
}
// extract the rating
if( apriv->contenth.rating_size!=0 ) {
- string=new char [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;
+ bp=demuxer->stream->read(apriv->contenth.rating_size);
+ pack_asf_string(bp.cdata(), bp.size());
+ demuxer->info().add(INFOT_RATING, bp.cdata());
}
MSG_V("\n");
break;
@@ -295,19 +289,12 @@
char *object=NULL, *ptr=NULL;
MSG_V("============ ASF Stream group == START ===\n");
MSG_V(" object size = %d\n", (int)apriv->objh.size);
- object = new char[apriv->objh.size];
- if( object==NULL ) {
- MSG_ERR("Memory allocation failed\n");
- delete demuxer->priv;
- return NULL;
- }
- demuxer->stream->read(object, apriv->objh.size );
+ bp=demuxer->stream->read(apriv->objh.size );
// FIXME: We need some endian handling below...
- ptr = object;
+ ptr = bp.cdata();
stream_count = le2me_16(*(uint16_t*)ptr);
ptr += sizeof(uint16_t);
- if(stream_count > 0)
- streams = (uint32_t*)mp_malloc(2*stream_count*sizeof(uint32_t));
+ if(stream_count > 0) streams = new uint32_t[2*stream_count];
MSG_V(" stream count=[0x%x][%u]\n", stream_count, stream_count );
for( i=0 ; i<stream_count && ptr<((char*)object+apriv->objh.size) ; i++ ) {
stream_id = le2me_16(*(uint16_t*)ptr);
@@ -321,7 +308,6 @@
streams[2*i+1] = max_bitrate;
}
MSG_V("============ ASF Stream group == END ===\n");
- delete object ;
break;
}
} // switch GUID
@@ -460,7 +446,8 @@
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);
demux->stream->seek(dataoff);
- demux->stream->read(dp->buffer()+dp->length(),len);
+ binary_packet bp=demux->stream->read(len);
+ memcpy(dp->buffer()+dp->length(),bp.data(),bp.size());
MSG_DBG3("data appended! %d+%d\n",dp->length(),len);
// we are ready now.
return 1;
@@ -474,7 +461,9 @@
}
Demuxer_Packet* dp=new(zeromem) Demuxer_Packet(len);
demux->stream->seek(dataoff);
- len=demux->stream->read(dp->buffer(),len);
+ binary_packet bp=demux->stream->read(len);
+ len=bp.size();
+ memcpy(dp->buffer(),bp.data(),len);
dp->resize(len);
dp->pts=time*0.001f;
dp->flags=keyframe?DP_KEYFRAME:DP_NONKEYFRAME;
Modified: mplayerxp/libmpdemux/demux_avi.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_avi.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_avi.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -118,14 +118,15 @@
extern const demuxer_driver_t demux_avi;
static void read_avi_header(Demuxer *demuxer,int index_mode){
-MainAVIHeader avih;
-sh_audio_t *sh_audio=NULL;
-sh_video_t *sh_video=NULL;
-int stream_id=-1;
-int idxfix_videostream=0;
-int idxfix_divx=0;
-avi_priv_t* priv=static_cast<avi_priv_t*>(demuxer->priv);
-off_t list_end=0;
+ binary_packet bp(1);
+ MainAVIHeader avih;
+ sh_audio_t *sh_audio=NULL;
+ sh_video_t *sh_video=NULL;
+ int stream_id=-1;
+ int idxfix_videostream=0;
+ int idxfix_divx=0;
+ avi_priv_t* priv=static_cast<avi_priv_t*>(demuxer->priv);
+ off_t list_end=0;
//---- AVI header:
priv->idx_size=0;
@@ -248,7 +249,8 @@
case mmioFOURCC('I','D','I','T'): hdr="Digitization Time";break;
case ckidAVIMAINHDR: // read 'avih'
- demuxer->stream->read((char*) &avih,std::min(size2,unsigned(sizeof(avih))));
+ bp=demuxer->stream->read(std::min(size2,unsigned(sizeof(avih))));
+ memcpy(&avih,bp.data(),bp.size());
le2me_MainAVIHeader(&avih); // swap to machine endian
chunksize-=std::min(size2,unsigned(sizeof(avih)));
demuxer->movi_length=avih.dwTotalFrames;
@@ -256,7 +258,8 @@
break;
case ckidSTREAMHEADER: { // read 'strh'
AVIStreamHeader h;
- demuxer->stream->read((char*) &h,std::min(size2,unsigned(sizeof(h))));
+ bp=demuxer->stream->read(std::min(size2,unsigned(sizeof(h))));
+ memcpy(&h,bp.data(),bp.size());
le2me_AVIStreamHeader(&h); // swap to machine endian
chunksize-=std::min(size2,unsigned(sizeof(h)));
++stream_id;
@@ -293,8 +296,9 @@
s->bIndexType = demuxer->stream->read_char();
s->nEntriesInUse = demuxer->stream->read_dword_le();
*(uint32_t *)s->dwChunkId = demuxer->stream->read_dword_le();
- demuxer->stream->read( (char *)s->dwReserved, 3*4);
- memset(s->dwReserved, 0, 3*4);
+ bp=demuxer->stream->read(3*4);
+ memcpy(s->dwReserved,bp.data(),bp.size());
+ memset(s->dwReserved,0,3*4);
print_avisuperindex_chunk(s);
@@ -319,7 +323,8 @@
if(last_fccType==streamtypeVIDEO){
sh_video->bih=(BITMAPINFOHEADER*)mp_mallocz((chunksize<sizeof(BITMAPINFOHEADER))?sizeof(BITMAPINFOHEADER):chunksize);
MSG_V("found 'bih', %u bytes of %d\n",chunksize,sizeof(BITMAPINFOHEADER));
- demuxer->stream->read((char*) sh_video->bih,chunksize);
+ bp=demuxer->stream->read(chunksize);
+ memcpy(sh_video->bih,bp.data(),bp.size());
le2me_BITMAPINFOHEADER(sh_video->bih); // swap to machine endian
// fixup MS-RLE header (seems to be broken for <256 color files)
if(sh_video->bih->biCompression<=1 && sh_video->bih->biSize==40)
@@ -372,7 +377,8 @@
unsigned wf_size = chunksize<sizeof(WAVEFORMATEX)?sizeof(WAVEFORMATEX):chunksize;
sh_audio->wf=(WAVEFORMATEX*)mp_mallocz(wf_size);
MSG_V("found 'wf', %d bytes of %d\n",chunksize,sizeof(WAVEFORMATEX));
- demuxer->stream->read((char*) sh_audio->wf,chunksize);
+ bp=demuxer->stream->read(chunksize);
+ memcpy(sh_audio->wf,bp.data(),bp.size());
le2me_WAVEFORMATEX(sh_audio->wf);
if (sh_audio->wf->cbSize != 0 &&
wf_size < sizeof(WAVEFORMATEX)+sh_audio->wf->cbSize) {
@@ -388,7 +394,8 @@
case mmioFOURCC('v', 'p', 'r', 'p'): {
VideoPropHeader* vprp = (VideoPropHeader*)mp_malloc(chunksize);
unsigned int i;
- demuxer->stream->read( (any_t*)vprp, chunksize);
+ bp=demuxer->stream->read(chunksize);
+ memcpy(vprp,bp.data(),bp.size());
le2me_VideoPropHeader(vprp);
chunksize -= sizeof(*vprp)-sizeof(vprp->FieldInfo);
chunksize /= sizeof(VIDEO_FIELD_DESC);
@@ -423,7 +430,8 @@
MSG_V("Reading INDEX block, %d chunks for %ld frames\n",
priv->idx_size,avih.dwTotalFrames);
priv->idx=(AVIINDEXENTRY*)mp_malloc(priv->idx_size<<4);
- demuxer->stream->read((char*)priv->idx,priv->idx_size<<4);
+ bp=demuxer->stream->read(priv->idx_size<<4);
+ memcpy(priv->idx,bp.data(),bp.size());
for (i = 0; i < priv->idx_size; i++) { // swap index to machine endian
AVIINDEXENTRY *entry=(AVIINDEXENTRY*)priv->idx + i;
le2me_AVIINDEXENTRY(entry);
@@ -469,14 +477,14 @@
if(size2==3)
chunksize=1; // empty
else {
- char buf[256];
int len=(size2<250)?size2:250;
- demuxer->stream->read(buf,len);
+ bp=demuxer->stream->read(len);
chunksize-=len;
- buf[len]=0;
- MSG_V("%-10s: %s\n",hdr,buf);
- if(infot!=-1) demuxer->info().add(infot, buf);
- else MSG_V(" %s: %s\n",hdr,buf);
+ 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_DBG2("list_end=0x%X pos=0x%X chunksize=0x%X next=0x%X\n",
@@ -520,7 +528,9 @@
int ret1, ret2;
memset(&cx->stdidx[j], 0, 32);
ret1 = demuxer->stream->seek( (off_t)cx->aIndex[j].qwOffset);
- ret2 = demuxer->stream->read( (char *)&cx->stdidx[j], 32);
+ bp = demuxer->stream->read(32);
+ ret2 = bp.size();
+ memcpy(&cx->stdidx[j],bp.data(),ret2);
if (ret2 != 32 || cx->stdidx[j].nEntriesInUse==0) {
// this is a broken file (probably incomplete) let the standard
// gen_index routine handle this
@@ -534,8 +544,8 @@
print_avistdindex_chunk(&cx->stdidx[j]);
priv->idx_size += cx->stdidx[j].nEntriesInUse;
cx->stdidx[j].aIndex = new avistdindex_entry[cx->stdidx[j].nEntriesInUse];
- demuxer->stream->read( (char *)cx->stdidx[j].aIndex,
- cx->stdidx[j].nEntriesInUse*sizeof(avistdindex_entry));
+ bp=demuxer->stream->read(cx->stdidx[j].nEntriesInUse*sizeof(avistdindex_entry));
+ memcpy( (char *)cx->stdidx[j].aIndex,bp.data(),bp.size());
for (k=0;k<cx->stdidx[j].nEntriesInUse; k++)
le2me_avistdindex_entry(&cx->stdidx[j].aIndex[k]);
Modified: mplayerxp/libmpdemux/demux_bmp.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_bmp.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_bmp.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -272,8 +272,8 @@
sh_video->bih->biClrUsed = demuxer->stream->read_dword_le();
sh_video->bih->biClrImportant = demuxer->stream->read_dword_le();
// fetch the palette
- demuxer->stream->read( (unsigned char *)(sh_video->bih) + 40,
- sh_video->bih->biClrUsed * 4);
+ binary_packet bp=demuxer->stream->read(sh_video->bih->biClrUsed * 4);
+ memcpy((unsigned char *)(sh_video->bih) + 40,bp.data(),bp.size());
// load the data
bmp_image = new(zeromem) bmp_image_t;
Modified: mplayerxp/libmpdemux/demux_dca.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_dca.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_dca.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -318,7 +318,8 @@
demuxer->movi_end = s->end_pos();
memcpy(b,hdr,4);
s->seek(pos+4);
- s->read(&b[4],8);
+ binary_packet bp=s->read(8);
+ memcpy(&b[4],bp.data(),bp.size());
for(n = 0; n < 5 ; n++) {
MSG_DBG2("read_ddca_tags\n");
pos = ddca_decode_header(b,bitrate,samplerate,channels);
@@ -327,7 +328,8 @@
s->skip(pos-12);
if(s->eof())
return 0;
- s->read(hdr,12);
+ bp=s->read(12);
+ memcpy(hdr,bp.data(),bp.size());
if(s->eof())
return 0;
}
@@ -336,18 +338,16 @@
static int dca_get_raw_id(Demuxer *demuxer,off_t fptr,unsigned *brate,unsigned *samplerate,unsigned *channels)
{
- uint32_t fcc,fcc1;
- uint8_t *p,b[32];
+ uint32_t fcc;
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;
+ fcc=s->read_dword();
+ fcc=me2be_32(fcc);
s->seek(fptr);
- s->read(b,sizeof(b));
- if(ddca_decode_header(b,samplerate,brate,channels)>0) return 1;
+ binary_packet bp=s->read(32);
+ if(ddca_decode_header((const uint8_t*)bp.data(),samplerate,brate,channels)>0) return 1;
s->seek(fptr);
return 0;
}
@@ -356,11 +356,9 @@
{
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(dca_get_raw_id(demuxer,0,&fcc1,&fcc2,&fcc2)) return MPXP_Ok;
return MPXP_False;
}
@@ -383,13 +381,15 @@
s = demuxer->stream;
s->reset();
s->seek(s->start_pos());
+ binary_packet bp(1);
while(n < 5 && !s->eof())
{
st_pos = s->tell();
step = 1;
if(pos < HDR_SIZE) {
- s->read(&hdr[pos],HDR_SIZE-pos);
+ bp=s->read(HDR_SIZE-pos);
+ memcpy(&hdr[pos],bp.data(),bp.size());
pos = HDR_SIZE;
}
@@ -400,7 +400,8 @@
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);
+ bp=s->read(12-HDR_SIZE);
+ memcpy(&b[HDR_SIZE],bp.data(),bp.size());
if((n = ddca_decode_header(b,&fmt,&fmt,&fmt)) > 0)
{
demuxer->movi_start = st_pos;
@@ -469,13 +470,12 @@
}
return 0;
}
-
+ binary_packet bp(1);
while(!s->eof() || (demux->movi_end && s->tell() >= demux->movi_end) ) {
- uint8_t hdr[16];
int len;
unsigned dummy;
- s->read(hdr,16);
- len = ddca_decode_header(hdr,&dummy,&dummy,&dummy);
+ bp=s->read(16);
+ len = ddca_decode_header((const uint8_t*)bp.data(),&dummy,&dummy,&dummy);
MSG_DBG2("dca_fillbuffer %u bytes\n",len);
if(s->eof()) return 0; /* workaround for dead-lock (skip(-7)) below */
if(len < 0) {
@@ -487,8 +487,10 @@
{
Demuxer_Packet* dp = new(zeromem) Demuxer_Packet(len);
dp->resize(len+16);
- memcpy(dp->buffer(),hdr,16);
- len=s->read(dp->buffer()+16,len-16);
+ memcpy(dp->buffer(),bp.data(),16);
+ bp=s->read(len-16);
+ len=bp.size();
+ memcpy(dp->buffer()+16,bp.data(),len);
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;
@@ -502,7 +504,6 @@
}
static void high_res_ddca_seek(Demuxer *demuxer,float _time) {
- uint8_t hdr[12];
int len,nf;
unsigned tmp;
dca_priv_t* priv = static_cast<dca_priv_t*>(demuxer->priv);
@@ -510,9 +511,9 @@
nf = _time*sh->rate/1152;
while(nf > 0) {
- demuxer->stream->read(hdr,12);
+ binary_packet bp=demuxer->stream->read(12);
MSG_DBG2("high_res_ddca_seek\n");
- len = ddca_decode_header(hdr,&tmp,&tmp,&tmp);
+ len = ddca_decode_header((const uint8_t*)bp.data(),&tmp,&tmp,&tmp);
if(len < 0) {
demuxer->stream->skip(-11);
continue;
Modified: mplayerxp/libmpdemux/demux_film.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_film.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_film.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -116,12 +116,14 @@
// load the chunks manually (instead of using ds_read_packet()), since
// they require some adjustment
// (all ones in syncinfo1 indicates an audio chunk)
+ binary_packet bp(1);
if (film_chunk.syncinfo1 == 0xFFFFFFFF)
{
if(demuxer->audio->id>=-1){ // audio not disabled
dp = new(zeromem) Demuxer_Packet(film_chunk.chunk_size);
- if (demuxer->stream->read( dp->buffer(), film_chunk.chunk_size) !=
- film_chunk.chunk_size) return 0;
+ bp=demuxer->stream->read(film_chunk.chunk_size);
+ if(bp.size() != size_t(film_chunk.chunk_size)) return 0;
+ memcpy(dp->buffer(),bp.data(),bp.size());
dp->pts = film_chunk.pts;
dp->pos = film_chunk.chunk_offset;
dp->flags = DP_NONKEYFRAME;
@@ -158,14 +160,14 @@
dp = new(zeromem) Demuxer_Packet(film_chunk.chunk_size - length_fix_bytes);
// these CVID data chunks have a few extra bytes; skip them
- if (demuxer->stream->read( dp->buffer(), 10) != 10)
- return 0;
+ bp=demuxer->stream->read(10);
+ if (bp.size() != 10) return 0;
+ memcpy(dp->buffer(),bp.data(),bp.size());
demuxer->stream->skip( length_fix_bytes);
- if (demuxer->stream->read( dp->buffer() + 10,
- film_chunk.chunk_size - (10 + length_fix_bytes)) !=
- (film_chunk.chunk_size - (10 + length_fix_bytes)))
- return 0;
+ bp=demuxer->stream->read(film_chunk.chunk_size - (10 + length_fix_bytes));
+ if(bp.size()!=size_t(film_chunk.chunk_size - (10 + length_fix_bytes))) return 0;
+ memcpy(dp->buffer(),bp.data(),bp.size());
dp->pts = film_chunk.pts;
dp->pos = film_chunk.chunk_offset;
@@ -309,7 +311,7 @@
demuxer->audio->sh = sh_audio;
sh_audio->ds = demuxer->audio;
- sh_audio->wf = (WAVEFORMATEX *)mp_malloc(sizeof(WAVEFORMATEX));
+ sh_audio->wf = new WAVEFORMATEX;
// uncompressed PCM format
sh_audio->wf->wFormatTag = 1;
@@ -340,7 +342,7 @@
demuxer->audio->sh = sh_audio;
sh_audio->ds = demuxer->audio;
- sh_audio->wf = (WAVEFORMATEX *)mp_malloc(sizeof(WAVEFORMATEX));
+ sh_audio->wf = new WAVEFORMATEX;
// uncompressed PCM format
sh_audio->wf->wFormatTag = 1;
@@ -374,8 +376,7 @@
" STAB chunk contains %d chunks\n", film_data->total_chunks);
// allocate enough entries for the chunk
- film_data->chunks =
- (film_chunk_t *)mp_malloc(film_data->total_chunks * sizeof(film_chunk_t));
+ film_data->chunks =new film_chunk_t[film_data->total_chunks];
// build the chunk index
counting_chunks = 1;
Modified: mplayerxp/libmpdemux/demux_flac.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_flac.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_flac.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -45,17 +45,20 @@
static int flac_get_raw_id(Demuxer *demuxer,off_t fptr,unsigned *brate,unsigned *samplerate,unsigned *channels)
{
- uint32_t fcc,fcc1;
- uint8_t *p,b[32];
+ uint32_t fcc1;
Stream *s;
*brate=*samplerate=*channels=0;
s = demuxer->stream;
s->seek(fptr);
- fcc=fcc1=s->read_dword();
+ fcc1=s->read_dword();
fcc1=me2be_32(fcc1);
- p = (uint8_t *)&fcc1;
s->seek(fptr);
- s->read(b,sizeof(b));
+ binary_packet bp=s->read(32);
+/*
+ s->samplerate = get_bits_long(&gb, 20);
+ s->channels = get_bits(&gb, 3) + 1;
+ s->bps = get_bits(&gb, 5) + 1;
+*/
if(fcc1 == mmioFOURCC('f','L','a','C')) return 1;
s->seek(fptr);
return 0;
@@ -92,13 +95,15 @@
s = demuxer->stream;
s->reset();
s->seek(s->start_pos());
+ binary_packet bp(1);
while(n < 5 && !s->eof())
{
st_pos = s->tell();
step = 1;
if(pos < HDR_SIZE) {
- s->read(&hdr[pos],HDR_SIZE-pos);
+ bp=s->read(HDR_SIZE-pos);
+ memcpy(&hdr[pos],bp.data(),bp.size());
pos = HDR_SIZE;
}
@@ -130,7 +135,9 @@
/* 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;
+ bp=s->read(4);
+ if(bp.size()!=4) return NULL;
+ memcpy(chunk,bp.data(),bp.size());
block_size=(chunk[1]<<16)|(chunk[2]<<8)|chunk[3];
switch (chunk[0] & 0x7F) {
/* STREAMINFO */
@@ -139,13 +146,15 @@
char sinfo[block_size];
WAVEFORMATEX* w;
unsigned long long int total_samples;
- sh_audio->wf = w = (WAVEFORMATEX*)mp_mallocz(sizeof(WAVEFORMATEX));
+ sh_audio->wf = w = new 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;
+ bp=s->read(block_size);
+ if(bp.size()!=(int)block_size) return NULL;
+ memcpy(sinfo,bp.data(),bp.size());
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;
@@ -229,7 +238,9 @@
}
int l = sh_audio->wf->nAvgBytesPerSec;
Demuxer_Packet* dp =new(zeromem) Demuxer_Packet(l);
- l=s->read(dp->buffer(),l);
+ binary_packet bp = s->read(l);
+ l=bp.size();
+ memcpy(dp->buffer(),bp.data(),bp.size());
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;
Modified: mplayerxp/libmpdemux/demux_fli.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_fli.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_fli.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -98,7 +98,8 @@
demuxer->stream->seek( 0);
header = new unsigned char[sizeof(BITMAPINFOHEADER) + 128];
- demuxer->stream->read( header + sizeof(BITMAPINFOHEADER), 128);
+ binary_packet bp=demuxer->stream->read(128);
+ memcpy(header + sizeof(BITMAPINFOHEADER),bp.data(),bp.size());
demuxer->stream->seek( 0);
demuxer->movi_start = 128;
@@ -120,7 +121,7 @@
frames->current_frame = 0;
// allocate enough entries for the indices
- frames->filepos = (off_t *)mp_malloc(frames->num_frames * sizeof(off_t));
+ frames->filepos = new off_t[frames->num_frames];
frames->frame_size = new unsigned int [frames->num_frames];
// create a new video stream header
Modified: mplayerxp/libmpdemux/demux_lavf.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_lavf.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_lavf.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -133,10 +133,11 @@
if(stream->eof()) //needed?
return -1;
- ret=stream->read(buf, size);
+ binary_packet bp=stream->read(size);
+ memcpy(buf,bp.data(),bp.size());
- MSG_DBG2("%d=mp_read(%p, %p, %d), eof:%d\n", ret, stream, buf, size, stream->eof());
- return ret;
+ MSG_DBG2("%d=mp_read(%p, %p, %d), eof:%d\n", bp.size(), stream, buf, size, stream->eof());
+ return bp.size();
}
static int64_t mpxp_seek(any_t*opaque, int64_t pos, int whence){
@@ -193,10 +194,12 @@
else if(mp_conf.verbose) av_log_set_level(AV_LOG_VERBOSE);
else av_log_set_level(AV_LOG_INFO);
- if(demuxer->stream->read( buf, PROBE_BUF_SIZE)!=PROBE_BUF_SIZE) {
+ binary_packet bp=demuxer->stream->read(PROBE_BUF_SIZE);
+ if(bp.size()!=PROBE_BUF_SIZE) {
delete demuxer->priv;
return MPXP_False;
}
+ memcpy(buf,bp.data(),bp.size());
avpd.filename= "xxx";
avpd.buf= buf;
avpd.buf_size= PROBE_BUF_SIZE;
Modified: mplayerxp/libmpdemux/demux_mkv.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_mkv.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_mkv.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -60,11 +60,11 @@
static const char* MKV_A_AAC_2MAIN ="A_AAC/MPEG2/MAIN";
static const char* MKV_A_AAC_2LC ="A_AAC/MPEG2/LC";
-static const char* MKV_A_AAC_2SBR ="A_AAC/MPEG2/LC/SBR";
+//static const char* MKV_A_AAC_2SBR ="A_AAC/MPEG2/LC/SBR";
static const char* MKV_A_AAC_2SSR ="A_AAC/MPEG2/SSR";
static const char* MKV_A_AAC_4MAIN ="A_AAC/MPEG4/MAIN";
static const char* MKV_A_AAC_4LC ="A_AAC/MPEG4/LC";
-static const char* MKV_A_AAC_4SBR ="A_AAC/MPEG4/LC/SBR";
+//static const char* MKV_A_AAC_4SBR ="A_AAC/MPEG4/LC/SBR";
static const char* MKV_A_AAC_4SSR ="A_AAC/MPEG4/SSR";
static const char* MKV_A_AAC_4LTP ="A_AAC/MPEG4/LTP";
static const char* MKV_A_AAC ="A_AAC";
@@ -91,11 +91,11 @@
static const char* MKV_V_REALV20 ="V_REAL/RV20";
static const char* MKV_V_REALV30 ="V_REAL/RV30";
static const char* MKV_V_REALV40 ="V_REAL/RV40";
-static const char* MKV_V_SORENSONV1 ="V_SORENSON/V1";
-static const char* MKV_V_SORENSONV2 ="V_SORENSON/V2";
-static const char* MKV_V_SORENSONV3 ="V_SORENSON/V3";
-static const char* MKV_V_CINEPAK ="V_CINEPAK";
-static const char* MKV_V_QUICKTIME ="V_QUICKTIME";
+//static const char* MKV_V_SORENSONV1 ="V_SORENSON/V1";
+//static const char* MKV_V_SORENSONV2 ="V_SORENSON/V2";
+//static const char* MKV_V_SORENSONV3 ="V_SORENSON/V3";
+//static const char* MKV_V_CINEPAK ="V_CINEPAK";
+//static const char* MKV_V_QUICKTIME ="V_QUICKTIME";
static const char* MKV_V_MPEG1 ="V_MPEG1";
static const char* MKV_V_MPEG2 ="V_MPEG2";
static const char* MKV_V_MPEG4_SP ="V_MPEG4/ISO/SP";
@@ -286,8 +286,9 @@
case 10:
{
union {uint8_t data[10]; long double ld;} u;
- if (s->read( u.data, 10) != 10)
- return EBML_FLOAT_INVALID;
+ binary_packet bp=s->read(10);
+ if(bp.size()!=10) return EBML_FLOAT_INVALID;
+ memcpy(u.data, bp.data(),bp.size());
value = be2me_ldbl(u.ld);
break;
}
@@ -318,12 +319,10 @@
if (length)
*length = len + l;
- str = (char *) mp_malloc (len+1);
- if (s->read( str, len) != (int) len)
- {
- delete str;
- return NULL;
- }
+ binary_packet bp = s->read(len);
+ if(bp.size()!=len) return NULL;
+ str = new char[len+1];
+ memcpy(str,bp.data(),bp.size());
str[len] = '\0';
return str;
@@ -695,7 +694,8 @@
static mkv_track_t * demux_mkv_find_track_by_num (mkv_demuxer_t *d, int n, int type)
{
- int i, id;
+ int id;
+ unsigned i;
for (i=0, id=0; i < d->num_tracks; i++)
if (d->tracks[i] != NULL && d->tracks[i]->type == type)
@@ -708,7 +708,8 @@
static mkv_track_t *
demux_mkv_find_track_by_language (mkv_demuxer_t *d,const char *language, int type)
{
- int i, len;
+ int len;
+ unsigned i;
language += strspn(language,",");
while((len = strcspn(language,",")) > 0)
@@ -890,12 +891,12 @@
void mkv_demuxer_t::free_cached_dps ()
{
mkv_track_t *track;
- int i, k;
+ unsigned i, k;
for (k = 0; k < num_tracks; k++)
{
track = tracks[k];
- for (i = 0; i < track->num_cached_dps; i++) delete track->cached_dps[i];
+ for (i = 0; i < unsigned(track->num_cached_dps); i++) delete track->cached_dps[i];
delete track->cached_dps;
track->cached_dps = NULL;
track->num_cached_dps = 0;
@@ -1118,6 +1119,7 @@
mkv_content_encoding_t *ce, e;
uint64_t len, length, l;
int il, n;
+ binary_packet bp(1);
ce = new mkv_content_encoding_t;
n = 0;
@@ -1130,7 +1132,6 @@
{
case MATROSKA_ID_CONTENTENCODING:
{
- uint64_t len;
int i;
memset (&e, 0, sizeof (e));
@@ -1191,7 +1192,8 @@
case MATROSKA_ID_CONTENTCOMPSETTINGS:
l = ebml_read_length (s, &i);
e.comp_settings = new uint8_t[l];
- s->read( e.comp_settings, l);
+ bp=s->read(l);
+ memcpy(e.comp_settings,bp.data(),bp.size());
e.comp_settings_len = l;
l += i;
break;
@@ -1408,6 +1410,7 @@
mkv_track_t *track;
uint64_t len, length, l;
int il;
+ binary_packet bp(1);
track = new mkv_track_t;
/* set default values */
@@ -1515,8 +1518,9 @@
if (num > std::numeric_limits<size_t>::max() - 1000) return 0;
l = x + num;
track->private_data = mp_malloc (num + LZO_INPUT_PADDING);
- if (s->read( track->private_data, num) != (int) num)
- goto err_out;
+ bp=s->read(num);
+ if (bp.size() != num) goto err_out;
+ memcpy(track->private_data,bp.data(),bp.size());
track->private_size = num;
MSG_V( "[mkv] | + CodecPrivate, length "
"%u\n", track->private_size);
@@ -1943,11 +1947,12 @@
l = x + num;
delete data;
data = new char [num];
- if (s->read( data, num) != (int) num)
- {
+ binary_packet bp=s->read(num);
+ if(bp.size() != num) {
delete data;
return 0;
}
+ memcpy(data,bp.data(),bp.size());
data_size = num;
MSG_V( "[mkv] | + FileData, length "
"%u\n", data_size);
@@ -2128,7 +2133,8 @@
display_create_tracks (Demuxer *demuxer)
{
mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv);
- int i, vid=0, aid=0, sid=0;
+ int vid=0, aid=0, sid=0;
+ unsigned i;
for (i=0; i<mkv_d->num_tracks; i++)
{
@@ -2259,7 +2265,8 @@
// copy type1 and type2 info from rv properties
memcpy(dst, &type1, 4);
memcpy(dst+4, &type2, 4);
- demuxer->stream->read( dst+8, cnt);
+ binary_packet bp=demuxer->stream->read(cnt);
+ memcpy(dst+8,bp.data(),bp.size());
track->realmedia = 1;
#ifdef USE_QTX_CODECS
@@ -2672,7 +2679,7 @@
{
mkv_demuxer_t *mkv_d = static_cast<mkv_demuxer_t*>(demuxer->priv);
mkv_track_t *track;
- int i, m;
+ unsigned i, m;
unsigned size;
uint8_t *buffer;
@@ -2774,7 +2781,8 @@
*/
static int demux_mkv_reverse_id(mkv_demuxer_t *d, int num, int type)
{
- int i, id;
+ int id;
+ unsigned i;
for (i=0, id=0; i < d->num_tracks; i++)
if (d->tracks[i] != NULL && d->tracks[i]->type == type) {
@@ -2806,7 +2814,8 @@
Stream *s = demuxer->stream;
mkv_demuxer_t *mkv_d;
mkv_track_t *track;
- int i, version, cont = 0;
+ int version, cont = 0;
+ unsigned i;
char *str;
s->seek( s->start_pos());
@@ -3031,7 +3040,7 @@
if (mkv_d->chapters)
{
- for (i=0; i < (int)mkv_d->num_chapters; i++)
+ for (i=0; i < mkv_d->num_chapters; i++)
{
mkv_d->chapters[i].start -= mkv_d->first_tc;
mkv_d->chapters[i].end -= mkv_d->first_tc;
@@ -3674,6 +3683,7 @@
Stream *s = demuxer->stream;
uint64_t l;
int il, tmp;
+ binary_packet bp(1);
while (1)
{
@@ -3704,11 +3714,12 @@
if (block_length > std::numeric_limits<size_t>::max()- LZO_INPUT_PADDING) return 0;
block = new uint8_t[block_length + LZO_INPUT_PADDING];
demuxer->filepos = s->tell();
- if (s->read(block,block_length) != (int) block_length)
- {
+ bp=s->read(block_length);
+ if (bp.size() != block_length) {
delete block;
return 0;
}
+ memcpy(block,bp.data(),bp.size());
l = tmp + block_length;
break;
@@ -3778,11 +3789,12 @@
block_length = ebml_read_length (s, &tmp);
block = new uint8_t[block_length];
demuxer->filepos = s->tell();
- if (s->read(block,block_length) != (int) block_length)
- {
+ bp=s->read(block_length);
+ if (bp.size() != block_length) {
delete block;
return 0;
}
+ memcpy(block,bp.data(),bp.size());
l = tmp + block_length;
res = handle_block (demuxer, block, block_length,
block_duration, block_bref, block_fref, 1);
Modified: mplayerxp/libmpdemux/demux_mov.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_mov.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_mov.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -599,6 +599,7 @@
off_t pos, off_t len, mov_track_t* trak);
static void lschunks(Demuxer* demuxer,int level,off_t endpos,mov_track_t* trak){
+ binary_packet bp(1);
mov_priv_t* priv=static_cast<mov_priv_t*>(demuxer->priv);
while(1){
off_t pos;
@@ -907,7 +908,7 @@
if(!is_vorbis)
{
sh->codecdata_len = esds.decoderConfigLen;
- sh->codecdata = (unsigned char *)mp_malloc(sh->codecdata_len);
+ sh->codecdata = new uint8_t[sh->codecdata_len];
memcpy(sh->codecdata, esds.decoderConfig, sh->codecdata_len);
}
}
@@ -920,7 +921,7 @@
if(atom_len > 8) {
// copy all the atom (not only payload) for lavc alac decoder
sh->codecdata_len = atom_len;
- sh->codecdata = (unsigned char *)mp_malloc(sh->codecdata_len);
+ sh->codecdata = new uint8_t[sh->codecdata_len];
memcpy(sh->codecdata, &trak->stdata[28], sh->codecdata_len);
}
} break;
@@ -1086,7 +1087,7 @@
// dump away the codec specific configuration for the AAC decoder
trak->stream_header_len = esds.decoderConfigLen;
- trak->stream_header = (unsigned char *)mp_malloc(trak->stream_header_len);
+ trak->stream_header = new uint8_t[trak->stream_header_len];
memcpy(trak->stream_header, esds.decoderConfig, trak->stream_header_len);
}
mp4_free_esds(&esds); // freeup esds mem
@@ -1122,7 +1123,7 @@
// Copy avcC for the AVC decoder
// This data will be put in extradata below, where BITMAPINFOHEADER is created
trak->stream_header_len = atom_len-8;
- trak->stream_header = (unsigned char *)mp_malloc(trak->stream_header_len);
+ trak->stream_header = new uint8_t[trak->stream_header_len];
memcpy(trak->stream_header, trak->stdata+pos+8, trak->stream_header_len);
}
break;
@@ -1336,7 +1337,8 @@
}
MSG_V( "Compressed header size: %d / %d\n",cmov_sz,moov_sz);
- demuxer->stream->read(cmov_buf,cmov_sz);
+ bp=demuxer->stream->read(cmov_sz);
+ memcpy(cmov_buf,bp.data(),bp.size());
zstrm.zalloc = (alloc_func)0;
zstrm.zfree = (free_func)0;
@@ -1406,7 +1408,8 @@
{
off_t text_len = demuxer->stream->read_word();
char text[text_len+2+1];
- demuxer->stream->read( (char *)&text, text_len+2);
+ bp=demuxer->stream->read(text_len+2);
+ memcpy(&text,bp.data(),bp.size());
text[text_len+2] = 0x0;
switch(udta_id)
{
@@ -1472,7 +1475,8 @@
udta_len=udta_size;
{
char dump[udta_len-4];
- demuxer->stream->read( (char *)&dump, udta_len-4-4);
+ bp=demuxer->stream->read( udta_len-4-4);
+ memcpy(&dump,bp.data(),bp.size());
udta_size -= udta_len;
}
}
@@ -1495,6 +1499,7 @@
static int lschunks_intrak(Demuxer* demuxer, int level, unsigned int id,
off_t pos, off_t len, mov_track_t* trak)
{
+ binary_packet bp(1);
switch(id) {
case MOV_FOURCC('m','d','a','t'): {
MSG_WARN("Hmm, strange MOV, parsing mdat in lschunks?\n");
@@ -1509,7 +1514,8 @@
// read codec data
trak->tkdata_len = len;
trak->tkdata = new unsigned char [trak->tkdata_len];
- demuxer->stream->read( trak->tkdata, trak->tkdata_len);
+ bp=demuxer->stream->read(trak->tkdata_len);
+ memcpy(trak->tkdata,bp.data(),bp.size());
/*
0 1 Version
1 3 Flags
@@ -1557,7 +1563,8 @@
/*unsigned int comp_mask =*/ demuxer->stream->read_dword();
unsigned _len = demuxer->stream->read_char();
char* str = new char [_len + 1];
- demuxer->stream->read( str, _len);
+ bp=demuxer->stream->read(_len);
+ memcpy(str,bp.data(),bp.size());
str[_len] = 0;
MSG_V( "MOV: %*sHandler header: %.4s/%.4s (%.4s) %s\n", level, "",
&type, &subtype, &manufact, str);
@@ -1623,7 +1630,8 @@
// NOTE: trak type is not yet known at this point :(((
trak->stdata_len = _len - 8;
trak->stdata = new unsigned char [trak->stdata_len];
- demuxer->stream->read( trak->stdata, trak->stdata_len);
+ bp=demuxer->stream->read(trak->stdata_len);
+ memcpy(trak->stdata,bp.data(),bp.size());
}
if (!demuxer->stream->seek( _pos + _len))
break;
@@ -1880,7 +1888,8 @@
char buf2[newlen];
len-=4;
- demuxer->stream->read( buf, len);
+ bp=demuxer->stream->read(len);
+ memcpy(buf,bp.data().bp.size());
zstrm.zalloc = (alloc_func)0;
zstrm.zfree = (free_func)0;
@@ -1903,7 +1912,8 @@
}
{
#endif
- demuxer->stream->read( buf, len);
+ bp=demuxer->stream->read(len);
+ memcpy(buf,bp.data(),bp.size());
write(fd, buf, len);
}
close(fd);
@@ -2010,7 +2020,8 @@
memcpy(dp->buffer(),trak->stream_header,trak->stream_header_len);
dp->pos=demuxer->stream->tell()-trak->stream_header_len;
dp->resize(x+trak->stream_header_len);
- x=demuxer->stream->read(dp->buffer()+trak->stream_header_len,x);
+ binary_packet bp=demuxer->stream->read(x);
+ memcpy(dp->buffer()+trak->stream_header_len,bp.data(),bp.size());
delete trak->stream_header;
trak->stream_header = NULL;
trak->stream_header_len = 0;
Modified: mplayerxp/libmpdemux/demux_mp3.cpp
===================================================================
--- mplayerxp/libmpdemux/demux_mp3.cpp 2013-06-04 17:51:34 UTC (rev 648)
+++ mplayerxp/libmpdemux/demux_mp3.cpp 2013-06-08 14:04:10 UTC (rev 649)
@@ -56,7 +56,7 @@
off_t spos;
while(!demuxer->stream->eof()) {
spos=demuxer->stream->tell();
- demuxer->stream->read(hdr,4);
+ binary_packet bp=demuxer->stream->read(4); memcpy(hdr,bp.data(),bp.size());
len = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL);
if(len < 0) {
demuxer->stream->skip(-3);
@@ -72,6 +72,7 @@
{
unsigned n;
Stream *s=demuxer->stream;
+ binary_packet bp(1);
for(n = 0; n < 5 ; n++) {
MSG_DBG2("read_mp3v1_tags\n");
pos = mp_decode_mp3_header(hdr,NULL,NULL,NULL,NULL);
@@ -80,14 +81,14 @@
s->skip(pos-4);
if(s->eof())
return 0;
- s->read(hdr,4);
+ bp=s->read(4); memcpy(hdr,bp.data(),bp.size());
if(s->eof())
return 0;
}
if(s->end_pos()) {
char tag[4];
s->seek(s->end_pos()-128);
- s->read(tag,3);
+ bp=s->read(3); memcpy(tag,bp.data(),bp.size());
tag[3] = '\0';
if(strcmp(tag,"TAG"))
demuxer->movi_end = s->end_pos();
@@ -95,19 +96,19 @@
char buf[31];
uint8_t g;
demuxer->movi_end = s->tell()-3;
- s->read(buf,30);
+ bp=s->read(30); memcpy(buf,bp.data(),bp.size());
buf[30] = '\0';
demuxer->info().add(INFOT_NAME,buf);
- s->read(buf,30);
+ bp=s->read(30); memcpy(buf,bp.data(),bp.size());
buf[30] = '\0';
demuxer->info().add(INFOT_AUTHOR,buf);
- s->read(buf,30);
+ bp=s->read(30); memcpy(buf,bp.data(),bp.size());
buf[30] = '\0';
demuxer->info().add(INFOT_ALBUM,buf);
- s->read(buf,4);
+ bp=s->read(4); memcpy(buf,bp.data(),bp.size());
buf[4] = '\0';
demuxer->info().add(INFOT_DATE,buf);
- s->read(buf,30);
+ bp=s->read(30); memcpy(buf,bp.data(),bp.size());
buf[30] = '\0';
demuxer->info().add(INFOT_COMMENTS,buf);
if(buf[28] == 0 && buf[29] != 0) {
@@ -143,6 +144,7 @@
{
off_t pos,epos;
Stream *s=demuxer->stream;
+ binary_packet bp(1);
if( flags==ID3V22_ZERO_FLAG ||
flags==ID3V22_UNSYNCH_FLAG ||
flags==ID3V22_COMPRESS_FLAG) return 0;
@@ -154,10 +156,12 @@
unsigned len;
unsigned char buf[ID3V22_FRAME_HEADER_SIZE];
char data[4096];
- s->read(buf,ID3V22_FRAME_HEADER_SIZE);
+ bp=s->read(ID3V22_FRAME_HEADER_SIZE);
+ memcpy(buf,bp.data(),bp.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)));
+ bp=s->read(std::min(len,unsigned(4096)));
+ memcpy(data,bp.data(),bp.size());
data[std::min(len,unsigned(4096))]=0;
switch(id)
{
@@ -212,13 +216,15 @@
{
off_t pos,epos;
Stream *s=demuxer->stream;
+ binary_packet bp(1);
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);
+ bp=demuxer->stream->read(4);
+ memcpy(buf,bp.data(),bp.size());
ehsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3];
demuxer->stream->skip(ehsize);
}
@@ -230,10 +236,12 @@
unsigned len;
unsigned char buf[ID3V23_FRAME_HEADER_SIZE];
char data[4096];
- s->read(buf,ID3V23_FRAME_HEADER_SIZE);
+ bp=s->read(ID3V23_FRAME_HEADER_SIZE);
+ memcpy(buf,bp.data(),bp.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)));
+ bp=s->read(std::min(len,unsigned(4096)));
+ memcpy(data,bp.data(),bp.size());
data[std::min(len,unsigned(4096))]=0;
MSG_V("ID3: %4s len %u\n",buf,len);
switch(id)
@@ -292,13 +300,16 @@
{
off_t pos,epos;
Stream *s=demuxer->stream;
+ binary_packet bp(1);
+
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);
+ bp=demuxer->stream->read(4);
+ memcpy(buf,bp.data(),bp.size());
ehsize=(buf[0] << 21) + (buf[1] << 14) + (buf[2] << 7) + buf[3];
demuxer->stream->skip(ehsize);
}
@@ -310,10 +321,13 @@
unsigned len;
unsigned char buf[ID3V23_FRAME_HEADER_SIZE];
char data[4096];
- s->read(buf,ID3V23_FRAME_HEADER_SIZE);
+ binary_packet bp(1);
+ bp=s->read(ID3V23_FRAME_HEADER_SIZE);
+ memcpy(buf,bp.data(),bp.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)));
+ bp=s->read(std::min(len,unsigned(4096)));
+ memcpy(data,bp.data(),bp.size());
data[std::min(len,unsigned(4096))]=0;
MSG_V("ID3: %4s len %u\n",buf,len);
switch(id)
@@ -352,7 +366,8 @@
vers=s->read_char();
rev=s->read_char();
flags=s->read_char();
- s->read(buf,4);
+ binary_packet bp=s->read(4);
+ memcpy(buf,bp.data(),bp.size());
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);
@@ -368,7 +383,7 @@
{
int retval=0;
uint32_t fcc,fcc1,fmt;
- uint8_t *p,b[32];
+ uint8_t *p;
Stream *s;
*brate=*samplerate=*channels=0;
s = demuxer->stream;
@@ -377,7 +392,7 @@
fcc1=me2be_32(fcc1);
p = (uint8_t *)&fcc1;
s->seek(fptr);
- s->read(b,sizeof(b));
+ binary_packet bp=s->read(32);
if(mp_check_mp3_header(fcc1,&fmt,brate,samplerate,channels)) {
if(fmt==1) retval = RAW_MP1;
else...
[truncated message content] |