diff options
author | arpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-05-10 03:39:54 +0000 |
---|---|---|
committer | arpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-05-10 03:39:54 +0000 |
commit | dda6708094e31b4bee948a48d4beaf2b2556d8f9 (patch) | |
tree | 951beee3ea2485c3827e7047931b3d26991816b3 /demuxer.c | |
parent | c92a2dfa975d16c67f1d88bbf669a0b45a4d422a (diff) | |
download | mpv-dda6708094e31b4bee948a48d4beaf2b2556d8f9.tar.bz2 mpv-dda6708094e31b4bee948a48d4beaf2b2556d8f9.tar.xz |
new audio playback and A-V sync code
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@747 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'demuxer.c')
-rw-r--r-- | demuxer.c | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -13,6 +13,7 @@ demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id){ 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 @@ int ds_fill_buffer(demux_stream_t *ds){ 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 @@ while(len>0){ 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){ |