summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_film.c
diff options
context:
space:
mode:
authormelanson <melanson@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-18 02:51:24 +0000
committermelanson <melanson@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-18 02:51:24 +0000
commit3d375b323097be0dfa70fdc928f7dea36053b515 (patch)
tree5ce720995f83a4cc300284528a5103e4ff9df98f /libmpdemux/demux_film.c
parente80c0bc832b5c93f0c475dbb209257ca65ea3940 (diff)
downloadmpv-3d375b323097be0dfa70fdc928f7dea36053b515.tar.bz2
mpv-3d375b323097be0dfa70fdc928f7dea36053b515.tar.xz
made a little more headway but it still doesn't work properly
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4227 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_film.c')
-rw-r--r--libmpdemux/demux_film.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/libmpdemux/demux_film.c b/libmpdemux/demux_film.c
index da8b89e195..1a70bceafc 100644
--- a/libmpdemux/demux_film.c
+++ b/libmpdemux/demux_film.c
@@ -81,6 +81,11 @@ demuxer_t* demux_open_film(demuxer_t* demuxer){
unsigned int chunk_type;
unsigned int chunk_size;
int i;
+ int frame_number;
+
+ int audio_channels;
+ int audio_bits;
+ int audio_frequency;
// go back to the beginning
stream_reset(demuxer->stream);
@@ -132,8 +137,21 @@ printf ("parsing FDSC chunk\n");
sh_video->format = stream_read_fourcc(demuxer->stream);
sh_video->disp_h = stream_read_dword(demuxer->stream);
sh_video->disp_w = stream_read_dword(demuxer->stream);
-// temporary; one of these fields has to specify FPS
-stream_skip(demuxer->stream, 12);
+ sh_video->fps = stream_read_char(demuxer->stream);
+ sh_video->frametime = 1/sh_video->fps;
+printf (" FILM video: %d x %d, %f fps\n", sh_video->disp_w,
+ sh_video->disp_h, sh_video->fps);
+
+ // temporary: These will eventually go directly into an audio structure
+ // of some sort
+ audio_channels = stream_read_char(demuxer->stream);
+ audio_bits = stream_read_char(demuxer->stream);
+ stream_skip(demuxer->stream, 1); // skip unknown byte
+ audio_frequency = stream_read_word(demuxer->stream);
+printf (" FILM audio: %d channels, %d bits, %d Hz\n",
+ audio_channels, audio_bits, audio_frequency);
+
+ stream_skip(demuxer->stream, 6);
break;
case CHUNK_STAB:
@@ -143,8 +161,7 @@ printf ("parsing STAB chunk\n");
// fetch the number of frames
frames->num_frames = stream_read_dword(demuxer->stream);
- frames->current_frame = 1;
-// frames->current_frame = 0;
+ frames->current_frame = 0;
// allocate enough entries for the indices
frames->filepos = (off_t *)malloc(frames->num_frames * sizeof(off_t));
@@ -153,13 +170,19 @@ printf ("parsing STAB chunk\n");
frames->flags2 = (int *)malloc(frames->num_frames * sizeof(int));
// build the frame index
+ frame_number = 0;
for (i = 0; i < frames->num_frames; i++)
{
- frames->filepos[i] = demuxer->movi_start + stream_read_dword(demuxer->stream);
- frames->frame_size[i] = stream_read_dword(demuxer->stream);
- frames->flags1[i] = stream_read_dword(demuxer->stream);
- frames->flags2[i] = stream_read_dword(demuxer->stream);
+ if (frames->flags1[i] == 0)
+ {
+ frames->filepos[frame_number] = demuxer->movi_start + stream_read_dword(demuxer->stream);
+ frames->frame_size[frame_number] = stream_read_dword(demuxer->stream) - 8;
+ frames->flags1[frame_number] = stream_read_dword(demuxer->stream);
+ frames->flags2[frame_number] = stream_read_dword(demuxer->stream);
+ frame_number++;
+ }
}
+ frames->num_frames = frame_number;
break;
default: