[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] |