[Mplayer-cvslog] CVS: main/libmpdemux demux_roq.c,1.4,1.5 video.c,1.12,1.13
Mike Melanson
melanson at mplayer.dev.hu
Sun Mar 31 19:24:16 CEST 2002
Update of /cvsroot/mplayer/main/libmpdemux
In directory mplayer:/var/tmp.root/cvs-serv27836/libmpdemux
Modified Files:
demux_roq.c video.c
Log Message:
fixed RoQ framerate by multiplying PTS calculation by some absurd constant
(and it works!)
Index: demux_roq.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_roq.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- demux_roq.c 18 Feb 2002 16:50:16 -0000 1.4
+++ demux_roq.c 31 Mar 2002 17:24:12 -0000 1.5
@@ -26,6 +26,15 @@
#define CHUNK_TYPE_AUDIO 0
#define CHUNK_TYPE_VIDEO 1
+// Pick a number, any number (but not 1); make it large enough (any number
+// over, say, 50, should work well). I don't know why this works, but it
+// does. For some reason, setting a frame's PTS value to
+// (frame number) / (fps)
+// when fps is small (20-30) doesn't work. But multiplying the PTS by
+// n / n
+// where n is some non-small number works PTS miracles.
+#define RANDOM_FPS_MULTIPLIER 162
+
typedef struct roq_chunk_t
{
int chunk_type;
@@ -79,7 +88,8 @@
if (roq_chunk.chunk_type == CHUNK_TYPE_AUDIO)
ds_read_packet(demuxer->audio, demuxer->stream, roq_chunk.chunk_size,
- roq_chunk.running_audio_sample_count / 22050,
+// roq_chunk.running_audio_sample_count / 22050,
+ 0,
roq_chunk.chunk_offset, 0);
else
ds_read_packet(demuxer->video, demuxer->stream, roq_chunk.chunk_size,
@@ -144,7 +154,7 @@
sh_video->format = mmioFOURCC('R', 'o', 'Q', 'V');
// constant frame rate
- sh_video->fps = fps;
+ sh_video->fps = fps * RANDOM_FPS_MULTIPLIER;
sh_video->frametime = 1 / sh_video->fps;
}
}
@@ -173,7 +183,7 @@
sh_audio->wf->nChannels = 1;
// always 22KHz, 16-bit
sh_audio->wf->nSamplesPerSec = 22050;
- sh_audio->wf->wBitsPerSample = 2;
+ sh_audio->wf->wBitsPerSample = 16;
}
// index the chunk
@@ -207,7 +217,7 @@
stream_tell(demuxer->stream) - 8;
roq_data->chunks[roq_data->total_chunks].chunk_size = chunk_size + 8;
roq_data->chunks[roq_data->total_chunks].video_chunk_number =
- roq_data->total_video_chunks++;
+ roq_data->total_video_chunks++ * RANDOM_FPS_MULTIPLIER;
stream_skip(demuxer->stream, chunk_size);
roq_data->total_chunks++;
Index: video.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/video.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- video.c 16 Mar 2002 19:58:07 -0000 1.12
+++ video.c 31 Mar 2002 17:24:12 -0000 1.13
@@ -299,6 +299,9 @@
// FILM (CPK) files have no fixed FPS - just frame durations!
frame_time=d_video->pts-pts1;
} else
+ if(demuxer->file_format==DEMUXER_TYPE_ROQ && !force_fps){
+ frame_time=d_video->pts-pts1;
+ } else
if(demuxer->file_format==DEMUXER_TYPE_VIVO && !force_fps){
// .VIVO files has no fixed FPS - just frame durations!
if(d_video->pts-pts1>0)
More information about the MPlayer-cvslog
mailing list