summaryrefslogtreecommitdiffstats
path: root/demuxer.c
diff options
context:
space:
mode:
authorarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-05-10 03:39:54 +0000
committerarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-05-10 03:39:54 +0000
commitdda6708094e31b4bee948a48d4beaf2b2556d8f9 (patch)
tree951beee3ea2485c3827e7047931b3d26991816b3 /demuxer.c
parentc92a2dfa975d16c67f1d88bbf669a0b45a4d422a (diff)
downloadmpv-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.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/demuxer.c b/demuxer.c
index 3dc8db4285..fb4ac868c4 100644
--- a/demuxer.c
+++ b/demuxer.c
@@ -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){