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){