Mercurial > mplayer.hg
diff demuxer.c @ 746:cd1f0d4de0b8
new audio playback and A-V sync code
author | arpi_esp |
---|---|
date | Thu, 10 May 2001 03:39:54 +0000 |
parents | c7117e17e20b |
children | c71695c30006 |
line wrap: on
line diff
--- a/demuxer.c Wed May 09 23:41:01 2001 +0000 +++ b/demuxer.c Thu May 10 03:39:54 2001 +0000 @@ -13,6 +13,7 @@ ds->buffer_pos=ds->buffer_size=0; ds->buffer=NULL; ds->pts=0; + ds->pts_bytes=0; ds->eof=0; ds->pos=0; ds->dpos=0; @@ -120,7 +121,11 @@ ds->buffer_size=p->len; ds->pos=p->pos; ds->dpos+=p->len; // !!! - ds->pts=p->pts; + if(p->pts){ + ds->pts=p->pts; + ds->pts_bytes=0; + } + ds->pts_bytes+=p->len; // !!! // free packet: ds->bytes-=p->len; ds->first=p->next; @@ -164,6 +169,24 @@ return bytes; } +int demux_read_data_pack(demux_stream_t *ds,unsigned char* mem,int len){ +int x; +int bytes=0; +while(len>0){ + x=ds->buffer_size-ds->buffer_pos; + if(x==0){ + if(!ds_fill_buffer(ds)) return bytes; + } else { + if(x>len) x=len; + if(mem) memcpy(mem+bytes,&ds->buffer[ds->buffer_pos],x); + bytes+=x;len-=x;ds->buffer_pos+=x; + return bytes; // stop at end of package! (for correct timestamping) + } +} +return bytes; +} + + void ds_free_packs(demux_stream_t *ds){ demux_packet_t *dp=ds->first; while(dp){