summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demux_mov.c6
-rw-r--r--libmpdemux/demuxer.c2
-rw-r--r--libmpdemux/demuxer.h2
3 files changed, 9 insertions, 1 deletions
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index 8264bee274..d521cbf686 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -548,10 +548,14 @@ int demux_mov_fill_buffer(demuxer_t *demuxer,demux_stream_t* ds){
if(trak->samplesize){
// read chunk:
+ int x;
if(trak->pos>=trak->chunks_size) return 0; // EOF
stream_seek(demuxer->stream,trak->chunks[trak->pos].pos);
pts=(float)(trak->chunks[trak->pos].sample*trak->duration)/(float)trak->timescale;
- ds_read_packet(ds,demuxer->stream,trak->chunks[trak->pos].size*trak->samplesize,pts,trak->chunks[trak->pos].pos,0);
+ x=trak->chunks[trak->pos].size*trak->samplesize;
+ x/=ds->ss_div; x*=ds->ss_mul; // compression ratio fix
+ ds_read_packet(ds,demuxer->stream,x,pts,trak->chunks[trak->pos].pos,0);
+ if(ds==demuxer->audio) printf("sample %d bytes pts %5.3f\n",trak->chunks[trak->pos].size*trak->samplesize,pts);
} else {
// read sample:
if(trak->pos>=trak->samples_size) return 0; // EOF
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index c4a44339d8..45fbec9f9e 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -40,6 +40,8 @@ demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id){
ds->asf_seq=-1;
ds->asf_packet=NULL;
//----------------
+ ds->ss_mul=ds->ss_div=1;
+//----------------
ds->sh=NULL;
return ds;
}
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 0cb3eea22e..17661fe716 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -50,6 +50,8 @@ typedef struct {
// ---- asf -----
demux_packet_t *asf_packet; // read asf fragments here
int asf_seq;
+// ---- mov -----
+ unsigned int ss_mul,ss_div;
// ---- stream header ----
void* sh;
} demux_stream_t;