annotate libmpdemux/demux_real.c @ 7691:5381fb575552

10l fix & cleanup of draw_frame(), still NO support for stride :(
author arpi
date Wed, 09 Oct 2002 23:39:36 +0000
parents 30e1c1f77737
children c97a06ff84cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1 /*
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
2 Real parser & demuxer
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
3
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
4 (C) Alex Beregszaszi <alex@naxine.org>
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
5
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
6 Based on FFmpeg's libav/rm.c.
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
7
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
8 TODO: fix the whole syncing mechanism
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
9
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
10 $Log$
7573
30e1c1f77737 rv10 cleanup
michael
parents: 7472
diff changeset
11 Revision 1.27 2002/10/01 20:01:04 michael
30e1c1f77737 rv10 cleanup
michael
parents: 7472
diff changeset
12 rv10 cleanup
30e1c1f77737 rv10 cleanup
michael
parents: 7472
diff changeset
13
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7105
diff changeset
14 Revision 1.26 2002/09/22 02:33:26 arpi
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7105
diff changeset
15 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7105
diff changeset
16
7105
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
17 Revision 1.25 2002/08/27 23:01:54 arpi
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
18 - added matrix cracking/debugging code - disabled
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
19 - use real codec headers for sipr
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
20
7085
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
21 Revision 1.24 2002/08/25 00:07:15 arpi
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
22 some files has some shit before teh audio/video headers...
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
23
7084
ffd4c6024cdb 10l - fixed chunktab size calculation
arpi
parents: 7081
diff changeset
24 Revision 1.23 2002/08/24 23:07:34 arpi
ffd4c6024cdb 10l - fixed chunktab size calculation
arpi
parents: 7081
diff changeset
25 10l - fixed chunktab size calculation
ffd4c6024cdb 10l - fixed chunktab size calculation
arpi
parents: 7081
diff changeset
26
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
27 Revision 1.22 2002/08/24 22:39:27 arpi
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
28 - changed re-muxed packet structure (see struct dp_hdr_t)
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
29 now the packets can be encapsulated into avi or other file formats
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
30 - skip redundant/resent fragments (bit 0x20 set of first byte of frag)
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
31
6995
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
32 Revision 1.21 2002/08/14 09:15:31 arpi
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
33 RV20 A-V desync fixed - use timestamp hack only for RV30
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
34
6982
9037a1a34c94 RV40 support
arpi
parents: 6916
diff changeset
35 Revision 1.20 2002/08/12 00:04:37 arpi
9037a1a34c94 RV40 support
arpi
parents: 6916
diff changeset
36 RV40 support
9037a1a34c94 RV40 support
arpi
parents: 6916
diff changeset
37
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
38 Revision 1.19 2002/08/05 03:13:45 arpi
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
39 fixed 'eof at 66s' bug
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
40
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
41 Revision 1.18 2002/06/14 00:49:56 arpi
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
42 fixed playback speed and a-v sync issues
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
43
6414
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
44 Revision 1.17 2002/06/13 13:31:45 arpi
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
45 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
46
6404
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
47 Revision 1.16 2002/06/13 00:14:28 atmos4
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
48 Implement Nilmoni's and Bernd Ernesti's patches for:
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
49 Better real codec dir detection and NetBSD real support.
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
50 Fix Nilmonis code, so it's working like expected.
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
51 Move a debug printf to mp_msg and some fixes in demux_real.c.
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
52 Some cosmetics :) -> RealPlayer 8 to RealPlayer, as RealOne (aka RealPlayer 9 works, too)
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
53
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
54 Revision 1.15 2002/06/10 13:55:56 arpi
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
55 export subpacket-size and matrix w*h to the codec (cook)
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
56
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
57 Revision 1.14 2002/06/10 02:27:31 arpi
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
58 export extra data for cook codec, some debug stuff
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
59
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
60 Revision 1.13 2002/06/09 01:07:22 arpi
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
61 - multiple audio/video stream support fixed
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
62 - aid/vid autodetection (asf style - use id of first packet received)
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
63 - rv20 sub-packets support
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
64 - exporting codec id and sub-id to the codec, in bitmapinfoheader
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
65
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
66 Revision 1.12 2002/06/08 20:46:14 arpi
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
67 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
68 (little cleanup and fprintf->mp_msg by me)
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
69
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
70 Revision 1.11 2002/04/30 23:29:38 alex
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
71 completed real seeking - working very well with audio only files
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
72
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5083
diff changeset
73 Revision 1.10 2002/04/24 15:36:06 albeu
8a357300d0ec Added demuxer uninit
albeu
parents: 5083
diff changeset
74 Added demuxer uninit
8a357300d0ec Added demuxer uninit
albeu
parents: 5083
diff changeset
75
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
76 Revision 1.9 2002/03/15 15:51:37 alex
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
77 added PRE-ALPHA seeking ability and index table generator (like avi's one)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
78
4328
2936f5445e0c fixed num_of_packets and current_packet handling, bug found by Mike Melanson
alex
parents: 4235
diff changeset
79 Revision 1.8 2002/01/23 19:41:01 alex
2936f5445e0c fixed num_of_packets and current_packet handling, bug found by Mike Melanson
alex
parents: 4235
diff changeset
80 fixed num_of_packets and current_packet handling, bug found by Mike Melanson
2936f5445e0c fixed num_of_packets and current_packet handling, bug found by Mike Melanson
alex
parents: 4235
diff changeset
81
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
82 Revision 1.7 2002/01/18 11:02:52 alex
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
83 fix dnet support
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
84
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
85 Revision 1.6 2002/01/04 19:32:58 alex
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
86 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
87
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
88
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
89 Audio codecs: (supported by RealPlayer8 for Linux)
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
90 DNET - RealAudio 3.0, really it's AC3 in swapped-byteorder
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
91 SIPR - SiproLab's audio codec, ACELP decoder working with MPlayer,
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
92 needs fine-tuning too :)
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
93 ATRC - RealAudio 8 (ATRAC3) - www.minidisc.org/atrac3_article.pdf,
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
94 ACM decoder uploaded, needs some fine-tuning to work
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
95 -> RealAudio 8
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
96 COOK/COKR - Real Cooker -> RealAudio G2
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
97
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
98 Video codecs: (supported by RealPlayer8 for Linux)
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
99 RV10 - H.263 based, working with libavcodec's decoder
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
100 RV20
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
101 RV30
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
102 */
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
103
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
104 #include <stdio.h>
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
105 #include <stdlib.h>
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
106 #include <unistd.h>
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
107
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
108 #include "config.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
109 #include "mp_msg.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
110 #include "help_mp.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
111
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
112 #include "stream.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
113 #include "demuxer.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
114 #include "stheader.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
115 #include "bswap.h"
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
116
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
117 //#define mp_dbg(mod,lev, args... ) mp_msg_c((mod<<8)|lev, ## args )
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
118
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
119 #define MKTAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24))
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
120
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
121 #define MAX_STREAMS 32
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
122
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
123 typedef struct {
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
124 int timestamp;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
125 int offset;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
126 int packetno;
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
127 int len; /* only filled by our index generator */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
128 int flags; /* only filled by our index generator */
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
129 } real_index_table_t;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
130
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
131 typedef struct {
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
132 /* for seeking */
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
133 int index_chunk_offset;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
134 real_index_table_t *index_table[MAX_STREAMS];
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
135 // int *index_table[MAX_STREAMS];
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
136 int index_table_size[MAX_STREAMS];
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
137 int data_chunk_offset;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
138 int num_of_packets;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
139 int current_packet;
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
140
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
141 int current_apacket;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
142 int current_vpacket;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
143
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
144 // timestamp correction:
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
145 int kf_pts; // timestamp of next video keyframe
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
146 int a_pts; // previous audio timestamp
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
147 float v_pts; // previous video timestamp
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
148
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
149 /* stream id table */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
150 int last_a_stream;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
151 int a_streams[MAX_STREAMS];
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
152 int last_v_stream;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
153 int v_streams[MAX_STREAMS];
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
154 } real_priv_t;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
155
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
156 /* originally from FFmpeg */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
157 static void get_str(int isbyte, demuxer_t *demuxer, char *buf, int buf_size)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
158 {
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
159 int len;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
160
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
161 if (isbyte)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
162 len = stream_read_char(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
163 else
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
164 len = stream_read_word(demuxer->stream);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
165
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
166 stream_read(demuxer->stream, buf, (len > buf_size) ? buf_size : len);
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
167 if (len > buf_size)
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
168 stream_skip(demuxer->stream, len-buf_size);
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
169
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
170 printf("read_str: %d bytes read\n", len);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
171 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
172
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
173 static void skip_str(int isbyte, demuxer_t *demuxer)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
174 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
175 int len;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
176
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
177 if (isbyte)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
178 len = stream_read_char(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
179 else
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
180 len = stream_read_word(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
181
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
182 stream_skip(demuxer->stream, len);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
183
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
184 printf("skip_str: %d bytes skipped\n", len);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
185 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
186
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
187 static void dump_index(demuxer_t *demuxer, int stream_id)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
188 {
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
189 real_priv_t *priv = demuxer->priv;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
190 real_index_table_t *index;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
191 int i, entries;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
192
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
193 if (!verbose)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
194 return;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
195
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
196 if (stream_id > MAX_STREAMS)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
197 return;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
198
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
199 index = priv->index_table[stream_id];
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
200 entries = priv->index_table_size[stream_id];
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
201
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
202 printf("Index table for stream %d\n", stream_id);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
203 for (i = 0; i < entries; i++)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
204 {
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
205 printf("packetno: %x pos: %x len: %x timestamp: %x flags: %x\n",
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
206 index[i].packetno, index[i].offset, index[i].len, index[i].timestamp,
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
207 index[i].flags);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
208 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
209 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
210
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
211 static int parse_index_chunk(demuxer_t *demuxer)
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
212 {
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
213 real_priv_t *priv = demuxer->priv;
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
214 int origpos = stream_tell(demuxer->stream);
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
215 int next_header_pos = priv->index_chunk_offset;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
216 int i, entries, stream_id;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
217
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
218 read_index:
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
219 stream_seek(demuxer->stream, next_header_pos);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
220
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
221 i = stream_read_dword_le(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
222 if ((i == -256) || (i != MKTAG('I', 'N', 'D', 'X')))
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
223 {
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
224 printf("Something went wrong, no index chunk found on given address (%d)\n",
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
225 next_header_pos);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
226 goto end;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
227 }
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
228
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
229 printf("Reading index table from index chunk (%d)\n",
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
230 next_header_pos);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
231
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
232 i = stream_read_dword(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
233 printf("size: %d bytes\n", i);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
234
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
235 i = stream_read_word(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
236 if (i != 0)
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
237 printf("Hmm, index table with unknown version (%d), please report it to MPlayer developers!\n", i);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
238
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
239 entries = stream_read_dword(demuxer->stream);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
240 printf("entries: %d\n", entries);
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
241
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
242 stream_id = stream_read_word(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
243 printf("stream_id: %d\n", stream_id);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
244
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
245 next_header_pos = stream_read_dword(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
246 printf("next_header_pos: %d\n", next_header_pos);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
247 if (entries <= 0)
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
248 {
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
249 if (next_header_pos)
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
250 goto read_index;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
251 i = entries;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
252 goto end;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
253 }
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
254
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
255 priv->index_table_size[stream_id] = entries;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
256 priv->index_table[stream_id] = malloc(priv->index_table_size[stream_id] * sizeof(real_index_table_t));
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
257
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
258 for (i = 0; i < entries; i++)
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
259 {
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
260 stream_skip(demuxer->stream, 2); /* version */
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
261 priv->index_table[stream_id][i].timestamp = stream_read_dword(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
262 priv->index_table[stream_id][i].offset = stream_read_dword(demuxer->stream);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
263 priv->index_table[stream_id][i].packetno = stream_read_dword(demuxer->stream);
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
264 // printf("Index table: Stream#%d: entry: %d: pos: %d\n",
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
265 // stream_id, i, priv->index_table[stream_id][i].offset);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
266 }
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
267
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
268 dump_index(demuxer, stream_id);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
269
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
270 if (next_header_pos > 0)
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
271 goto read_index;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
272
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
273 end:
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
274 demuxer->seekable = 1; /* got index, we're able to seek */
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
275 if (i == -256)
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
276 stream_reset(demuxer->stream);
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
277 stream_seek(demuxer->stream, origpos);
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
278 if (i == -256)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
279 return 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
280 else
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
281 return 1;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
282 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
283
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
284 static int generate_index(demuxer_t *demuxer)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
285 {
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
286 real_priv_t *priv = demuxer->priv;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
287 int origpos = stream_tell(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
288 int data_pos = priv->data_chunk_offset-10;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
289 int num_of_packets = 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
290 int i, entries = 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
291 int len, stream_id = 0, timestamp, flags;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
292 int tab_pos = 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
293
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
294 read_index:
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
295 stream_seek(demuxer->stream, data_pos);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
296
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
297 i = stream_read_dword_le(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
298 if ((i == -256) || (i != MKTAG('D', 'A', 'T', 'A')))
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
299 {
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
300 printf("Something went wrong, no data chunk found on given address (%d)\n",
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
301 data_pos);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
302 goto end;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
303 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
304 stream_skip(demuxer->stream, 4); /* chunk size */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
305 stream_skip(demuxer->stream, 2); /* version */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
306
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
307 num_of_packets = stream_read_dword(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
308 printf("Generating index table from raw data (pos: 0x%x) for %d packets\n",
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
309 data_pos, num_of_packets);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
310
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
311 data_pos = stream_read_dword_le(demuxer->stream)-10; /* next data chunk */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
312
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
313 for (i = 0; i < MAX_STREAMS; i++)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
314 {
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
315 priv->index_table_size[i] = num_of_packets;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
316 priv->index_table[i] = malloc(priv->index_table_size[i] * sizeof(real_index_table_t));
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
317 // priv->index_table[stream_id] = realloc(priv->index_table[stream_id],
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
318 // priv->index_table_size[stream_id] * sizeof(real_index_table_t));
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
319 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
320
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
321 tab_pos = 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
322
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
323 // memset(priv->index_table_size, 0, sizeof(int)*MAX_STREAMS);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
324 // memset(priv->index_table, 0, sizeof(real_index_table_t)*MAX_STREAMS);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
325
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
326 while (tab_pos < num_of_packets)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
327 {
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
328 i = stream_read_char(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
329 if (i == -256)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
330 goto end;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
331 stream_skip(demuxer->stream, 1);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
332 // stream_skip(demuxer->stream, 2); /* version */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
333
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
334 len = stream_read_word(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
335 stream_id = stream_read_word(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
336 timestamp = stream_read_dword(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
337
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
338 stream_skip(demuxer->stream, 1); /* reserved */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
339 flags = stream_read_char(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
340
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
341 i = tab_pos;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
342
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
343 // priv->index_table_size[stream_id] = i;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
344 // if (priv->index_table[stream_id] == NULL)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
345 // priv->index_table[stream_id] = malloc(priv->index_table_size[stream_id] * sizeof(real_index_table_t));
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
346 // else
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
347 // priv->index_table[stream_id] = realloc(priv->index_table[stream_id],
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
348 // priv->index_table_size[stream_id] * sizeof(real_index_table_t));
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
349
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
350 priv->index_table[stream_id][i].timestamp = timestamp;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
351 priv->index_table[stream_id][i].offset = stream_tell(demuxer->stream)-12;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
352 priv->index_table[stream_id][i].len = len;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
353 priv->index_table[stream_id][i].packetno = entries;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
354 priv->index_table[stream_id][i].flags = flags;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
355
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
356 tab_pos++;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
357
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
358 /* skip data */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
359 stream_skip(demuxer->stream, len-12);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
360 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
361 dump_index(demuxer, stream_id);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
362 if (data_pos)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
363 goto read_index;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
364
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
365 end:
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
366 demuxer->seekable = 1; /* got index, we're able to seek */
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
367 if (i == -256)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
368 stream_reset(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
369 stream_seek(demuxer->stream, origpos);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
370 if (i == -256)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
371 return 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
372 else
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
373 return 1;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
374 }
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
375
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
376 int real_check_file(demuxer_t* demuxer)
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
377 {
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
378 real_priv_t *priv;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
379 int c;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
380
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
381 mp_msg(MSGT_DEMUX,MSGL_V,"Checking for REAL\n");
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
382
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
383 c = stream_read_dword_le(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
384 if (c == -256)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
385 return 0; /* EOF */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
386 if (c != MKTAG('.', 'R', 'M', 'F'))
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
387 return 0; /* bad magic */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
388
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
389 priv = malloc(sizeof(real_priv_t));
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
390 memset(priv, 0, sizeof(real_priv_t));
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
391 demuxer->priv = priv;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
392
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
393 return 1;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
394 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
395
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
396 void hexdump(char *, unsigned long);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
397
6995
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
398 static float real_fix_timestamp(real_priv_t* priv, unsigned char* s, int timestamp, float frametime, unsigned int format){
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
399 float v_pts;
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
400 int kf=timestamp;
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
401 if(format==0x30335652){ // RV30 timestamps:
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
402 kf=2*(((s[1]&15)<<8)+s[2]); // 12-bit timestamp from frame header
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
403 //kf=((s[1]<<8)+s[2])>>3; // 12-bit timestamp from frame header
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
404 printf("\nTS: %08X (%04X) %02X %02X %02X %02X\n",timestamp,kf,s[0],s[1],s[2],s[3]);
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
405 kf|=timestamp&(~0x1fff); // combine with packet timestamp
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
406 if(kf<timestamp-4096) kf+=8192; else // workaround wrap-around problems
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
407 if(kf>timestamp+4096) kf-=8192;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
408 if(!(s[0]&0x8) || !(s[0]&0x10)){ // P || I frame -> swap timestamps
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
409 int tmp=kf;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
410 kf=priv->kf_pts;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
411 priv->kf_pts=tmp;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
412 // if(kf<=tmp) kf=0;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
413 }
6995
8f92313a0cd5 RV20 A-V desync fixed - use timestamp hack only for RV30
arpi
parents: 6982
diff changeset
414 }
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
415 v_pts=kf*0.001f;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
416 if(v_pts<priv->v_pts || !kf) v_pts=priv->v_pts+frametime;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
417 priv->v_pts=v_pts;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
418 // printf("\n#T# %5d/%5d (%5.3f) %5.3f \n",kf,timestamp,frametime,v_pts);
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
419 return v_pts;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
420 }
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
421
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
422 typedef struct dp_hdr_s {
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
423 uint32_t chunks; // number of chunks
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
424 uint32_t timestamp; // timestamp from packet header
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
425 uint32_t len; // length of actual data
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
426 uint32_t chunktab; // offset to chunk offset array
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
427 } dp_hdr_t;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
428
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
429 // return value:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
430 // 0 = EOF or no stream found
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
431 // 1 = successfully read a packet
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
432 int demux_real_fill_buffer(demuxer_t *demuxer)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
433 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
434 real_priv_t *priv = demuxer->priv;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
435 demux_stream_t *ds = NULL;
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
436 sh_audio_t *sh_audio = NULL;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
437 sh_video_t *sh_video = NULL;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
438 int len;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
439 int timestamp;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
440 int stream_id;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
441 int i;
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
442 int flags;
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
443 int version;
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
444 int reserved;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
445
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
446 loop:
4328
2936f5445e0c fixed num_of_packets and current_packet handling, bug found by Mike Melanson
alex
parents: 4235
diff changeset
447 /* also don't check if no num_of_packets was defined in header */
2936f5445e0c fixed num_of_packets and current_packet handling, bug found by Mike Melanson
alex
parents: 4235
diff changeset
448 if ((priv->current_packet > priv->num_of_packets) &&
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
449 (priv->num_of_packets != -10)){
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
450 printf("num_of_packets reached!\n");
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
451 return 0; /* EOF */
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
452 }
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
453 demuxer->filepos = stream_tell(demuxer->stream);
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
454 version = stream_read_word(demuxer->stream); /* version */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
455 len = stream_read_word(demuxer->stream);
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
456
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
457 if (len == -256){ /* EOF */
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
458 printf("len==-256!\n");
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
459 return 0;
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
460 }
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
461 if (len < 12)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
462 {
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
463 printf("%08X: packet v%d len=%d \n",(int)demuxer->filepos,(int)version,(int)len);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
464 printf("bad packet len (%d)\n", len);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
465 stream_skip(demuxer->stream, len);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
466 goto loop;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
467 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
468 stream_id = stream_read_word(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
469 timestamp = stream_read_dword(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
470
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
471 reserved = stream_read_char(demuxer->stream);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
472 flags = stream_read_char(demuxer->stream);
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
473 /* flags: */
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
474 /* 0x1 - reliable */
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
475 /* 0x2 - keyframe */
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
476
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
477 // printf("%08X: packet v%d len=%4d id=%d pts=%6d rvd=%d flags=%d \n",
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
478 // (int)demuxer->filepos,(int)version,(int)len, stream_id,
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
479 // (int) timestamp, reserved, flags);
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
480
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
481 // debug re-enabled (FS)
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
482 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "len:%d\n", len);
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
483 mp_dbg(MSGT_DEMUX,MSGL_V, "\npacket#%d: pos: 0x%0x, len: %d, id: %d, pts: %d, flags: %x rvd:%d\n",
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
484 priv->current_packet, (int)demuxer->filepos, len, stream_id, timestamp, flags, reserved);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
485
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
486 priv->current_packet++;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
487 len -= 12;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
488
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
489 // printf("s_id=%d aid=%d vid=%d \n",stream_id,demuxer->audio->id,demuxer->video->id);
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
490
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
491 /* check if stream_id is audio stream */
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
492 if(demuxer->audio->id==-1 || demuxer->audio->id==stream_id)
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
493 for (i = 0; i < priv->last_a_stream; i++)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
494 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
495 if (priv->a_streams[i] == stream_id)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
496 {
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
497 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "packet is audio (id: %d)\n", stream_id);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
498 ds = demuxer->audio; /* FIXME */
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
499 sh_audio = ds->sh;
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
500 priv->current_apacket++;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
501 demuxer->audio->id=stream_id;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
502 break;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
503 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
504 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
505 /* check if stream_id is video stream */
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
506 if(demuxer->video->id==-1 || demuxer->video->id==stream_id)
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
507 for (i = 0; i < priv->last_v_stream; i++)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
508 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
509 if (priv->v_streams[i] == stream_id)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
510 {
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
511 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "packet is video (id: %d)\n", stream_id);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
512 ds = demuxer->video; /* FIXME */
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
513 sh_video = ds->sh;
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
514 priv->current_vpacket++;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
515 demuxer->video->id=stream_id;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
516 break;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
517 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
518 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
519
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
520 /* id not found */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
521 if (ds == NULL)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
522 {
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
523 mp_msg(MSGT_DEMUX,MSGL_DBG2, "unknown stream id (%d)\n", stream_id);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
524 stream_skip(demuxer->stream, len);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
525 goto loop;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
526 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
527
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
528 #if 0
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
529 ds_read_packet(ds, demuxer->stream, len, timestamp/90000.0f,
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
530 demuxer->filepos, (flags & 0x2) ? 0x10 : 0);
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
531 #else
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
532 {
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
533 demux_packet_t *dp=NULL;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
534 // = new_demux_packet(len);
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
535
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
536 /* if DNET, swap bytes! */
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
537 if (sh_audio != NULL) {
7105
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
538 #ifdef CRACK_MATRIX
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
539 int spos=stream_tell(demuxer->stream);
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
540 static int cnt=0;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
541 static int cnt2=CRACK_MATRIX;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
542 #endif
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
543 dp = new_demux_packet(len);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
544 stream_read(demuxer->stream, dp->buffer, len);
7105
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
545 #ifdef CRACK_MATRIX
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
546 printf("*** audio block len=%d\n",len);
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
547 { // HACK - used for reverse engineering the descrambling matrix
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
548 FILE* f=fopen("test.rm","r+");
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
549 fseek(f,spos,SEEK_SET);
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
550 ++cnt;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
551 // for(i=0;i<len;i++) dp->buffer[i]=i/0x12;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
552 // for(i=0;i<len;i++) dp->buffer[i]=i;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
553 // for(i=0;i<len;i++) dp->buffer[i]=cnt;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
554 // for(i=0;i<len;i++) dp->buffer[i]=cnt<<4;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
555 for(i=0;i<len;i++) dp->buffer[i]=(i==cnt2) ? (cnt+16*(8+cnt)) : 0;
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
556 if(cnt==6){ cnt=0; ++cnt2; }
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
557 fwrite(dp->buffer, len, 1, f);
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
558 fclose(f);
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
559 if(cnt2>0x150) *((int*)NULL)=1; // sig11 :)
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
560 }
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
561 #endif
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
562 if (sh_audio->format == 0x2000)
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
563 {
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
564 char *ptr = dp->buffer;
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
565
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
566 for (i = 0; i < len; i += 2)
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
567 {
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
568 const char tmp = ptr[0];
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
569 ptr[0] = ptr[1];
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
570 ptr[1] = tmp;
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
571 ptr += 2;
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
572 }
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
573 }
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
574 dp->pts = (priv->a_pts==timestamp) ? 0 : (timestamp/1000.0f);
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
575 priv->a_pts=timestamp;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
576 dp->pos = demuxer->filepos;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
577 dp->flags = (flags & 0x2) ? 0x10 : 0;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
578 ds_add_packet(ds, dp);
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
579 } else
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
580 if (sh_video != NULL) {
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
581 // we need a more complicated demuxing
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
582 // a block may contain multiple packets
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
583 // as well as a packet may be contained in multiple blocks
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7105
diff changeset
584 int vpkg_header, vpkg_length, vpkg_offset;
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7105
diff changeset
585 int vpkg_seqnum=-1;
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
586 int vpkg_subseq=0;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
587
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
588 while(len>2){
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
589 dp_hdr_t* dp_hdr;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
590 unsigned char* dp_data;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
591 uint32_t* extra;
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
592
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
593 // printf("xxx len=%d \n",len);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
594
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
595 // read packet header
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
596 // bit 7: 1=last block in block chain
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
597 // bit 6: 1=short header (only one block?)
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
598 vpkg_header=stream_read_char(demuxer->stream); --len;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
599 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "hdr: %0.2X (len=%d) ",vpkg_header,len);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
600
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
601 if (0x40==(vpkg_header&0xc0)) {
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
602 // seems to be a very short header
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
603 // 2 bytes, purpose of the second byte yet unknown
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
604 int bummer;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
605 bummer=stream_read_char(demuxer->stream); --len;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
606 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "%0.2X",bummer);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
607 vpkg_offset=0;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
608 vpkg_length=len;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
609 } else {
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
610
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
611 if (0==(vpkg_header&0x40)) {
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
612 // sub-seqnum (bits 0-6: number of fragment. bit 7: ???)
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
613 vpkg_subseq=stream_read_char(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
614 --len;
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
615 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "subseq: %0.2X ",vpkg_subseq);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
616 vpkg_subseq&=0x7f;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
617 }
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
618
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
619 // size of the complete packet
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
620 // bit 14 is always one (same applies to the offset)
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
621 vpkg_length=stream_read_word(demuxer->stream);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
622 len-=2;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
623 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "l: %0.2X %0.2X ",vpkg_length>>8,vpkg_length&0xff);
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
624 if (!(vpkg_length&0xC000)) {
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
625 vpkg_length<<=16;
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
626 vpkg_length|=stream_read_word(demuxer->stream);
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
627 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "l+: %0.2X %0.2X ",(vpkg_length>>8)&0xff,vpkg_length&0xff);
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
628 len-=2;
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
629 } else
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
630 vpkg_length&=0x3fff;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
631
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
632 // offset of the following data inside the complete packet
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
633 // Note: if (hdr&0xC0)==0x80 then offset is relative to the
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
634 // _end_ of the packet, so it's equal to fragment size!!!
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
635 vpkg_offset=stream_read_word(demuxer->stream);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
636 len-=2;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
637 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "o: %0.2X %0.2X ",vpkg_offset>>8,vpkg_offset&0xff);
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
638 if (!(vpkg_offset&0xC000)) {
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
639 vpkg_offset<<=16;
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
640 vpkg_offset|=stream_read_word(demuxer->stream);
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
641 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "o+: %0.2X %0.2X ",(vpkg_offset>>8)&0xff,vpkg_offset&0xff);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
642 len-=2;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
643 } else
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
644 vpkg_offset&=0x3fff;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
645
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
646 vpkg_seqnum=stream_read_char(demuxer->stream); --len;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
647 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "seq: %0.2X ",vpkg_seqnum);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
648 }
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
649 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "\n");
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
650 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "blklen=%d\n", len);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
651 mp_msg(MSGT_DEMUX,MSGL_DBG2, "block: hdr=0x%0x, len=%d, offset=%d, seqnum=%d\n",
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
652 vpkg_header, vpkg_length, vpkg_offset, vpkg_seqnum);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
653
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
654 if(ds->asf_packet){
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
655 dp=ds->asf_packet;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
656 dp_hdr=(dp_hdr_t*)dp->buffer;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
657 dp_data=dp->buffer+sizeof(dp_hdr_t);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
658 extra=(uint32_t*)(dp->buffer+dp_hdr->chunktab);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
659 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "we have an incomplete packet (oldseq=%d new=%d)\n",ds->asf_seq,vpkg_seqnum);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
660 // we have an incomplete packet:
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
661 if(ds->asf_seq!=vpkg_seqnum){
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
662 // this fragment is for new packet, close the old one
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
663 mp_msg(MSGT_DEMUX,MSGL_DBG2, "closing probably incomplete packet, len: %d \n",dp->len);
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
664 dp->pts=(dp_hdr->len<3)?0:
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
665 real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format);
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
666 ds_add_packet(ds,dp);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
667 ds->asf_packet=NULL;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
668 } else {
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
669 // append data to it!
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
670 ++dp_hdr->chunks;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
671 mp_msg(MSGT_DEMUX,MSGL_DBG2,"[chunks=%d subseq=%d]\n",dp_hdr->chunks,vpkg_subseq);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
672 if(dp_hdr->chunktab+8*(1+dp_hdr->chunks)>dp->len){
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
673 // increase buffer size, this should not happen!
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
674 mp_msg(MSGT_DEMUX,MSGL_WARN, "chunktab buffer too small!!!!!\n");
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
675 dp->len=dp_hdr->chunktab+8*(4+dp_hdr->chunks);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
676 dp->buffer=realloc(dp->buffer,dp->len);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
677 // re-calc pointers:
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
678 dp_hdr=(dp_hdr_t*)dp->buffer;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
679 dp_data=dp->buffer+sizeof(dp_hdr_t);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
680 extra=(uint32_t*)(dp->buffer+dp_hdr->chunktab);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
681 }
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
682 extra[2*dp_hdr->chunks+0]=1;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
683 extra[2*dp_hdr->chunks+1]=dp_hdr->len;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
684 if(0x80==(vpkg_header&0xc0)){
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
685 // last fragment!
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
686 if(dp_hdr->len!=vpkg_length-vpkg_offset)
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
687 mp_msg(MSGT_DEMUX,MSGL_V,"warning! assembled.len=%d frag.len=%d total.len=%d \n",dp->len,vpkg_offset,vpkg_length-vpkg_offset);
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
688 stream_read(demuxer->stream, dp_data+dp_hdr->len, vpkg_offset);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
689 if(dp_data[dp_hdr->len]&0x20) --dp_hdr->chunks; else
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
690 dp_hdr->len+=vpkg_offset;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
691 len-=vpkg_offset;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
692 mp_dbg(MSGT_DEMUX,MSGL_DBG2, "fragment (%d bytes) appended, %d bytes left\n",vpkg_offset,len);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
693 // we know that this is the last fragment -> we can close the packet!
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
694 dp->pts=(dp_hdr->len<3)?0:
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
695 real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
696 ds_add_packet(ds,dp);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
697 ds->asf_packet=NULL;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
698 // continue parsing
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
699 continue;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
700 }
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
701 // non-last fragment:
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
702 if(dp_hdr->len!=vpkg_offset)
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
703 mp_msg(MSGT_DEMUX,MSGL_V,"warning! assembled.len=%d offset=%d frag.len=%d total.len=%d \n",dp->len,vpkg_offset,len,vpkg_length);
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
704 stream_read(demuxer->stream, dp_data+dp_hdr->len, len);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
705 if(dp_data[dp_hdr->len]&0x20) --dp_hdr->chunks; else
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
706 dp_hdr->len+=len;
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
707 len=0;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
708 break; // no more fragments in this chunk!
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
709 }
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
710 }
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
711 // create new packet!
7084
ffd4c6024cdb 10l - fixed chunktab size calculation
arpi
parents: 7081
diff changeset
712 dp = new_demux_packet(sizeof(dp_hdr_t)+vpkg_length+8*(1+2*(vpkg_header&0x3F)));
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
713 // the timestamp seems to be in milliseconds
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6414
diff changeset
714 dp->pts = 0; // timestamp/1000.0f; //timestamp=0;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
715 dp->pos = demuxer->filepos;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
716 dp->flags = (flags & 0x2) ? 0x10 : 0;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
717 ds->asf_seq = vpkg_seqnum;
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
718 dp_hdr=(dp_hdr_t*)dp->buffer;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
719 dp_hdr->chunks=0;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
720 dp_hdr->timestamp=timestamp;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
721 dp_hdr->chunktab=sizeof(dp_hdr_t)+vpkg_length;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
722 dp_data=dp->buffer+sizeof(dp_hdr_t);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
723 extra=(uint32_t*)(dp->buffer+dp_hdr->chunktab);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
724 extra[0]=1; extra[1]=0; // offset of the first chunk
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
725 if(0x00==(vpkg_header&0xc0)){
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
726 // first fragment:
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
727 dp_hdr->len=len;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
728 stream_read(demuxer->stream, dp_data, len);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
729 ds->asf_packet=dp;
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
730 len=0;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
731 break;
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
732 }
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
733 // whole packet (not fragmented):
7081
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
734 dp_hdr->len=vpkg_length; len-=vpkg_length;
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
735 stream_read(demuxer->stream, dp_data, vpkg_length);
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
736 dp->pts=(dp_hdr->len<3)?0:
66c2e2d0504f - changed re-muxed packet structure (see struct dp_hdr_t)
arpi
parents: 6995
diff changeset
737 real_fix_timestamp(priv,dp_data,dp_hdr->timestamp,sh_video->frametime,sh_video->format);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
738 ds_add_packet(ds,dp);
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
739
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
740 } // while(len>0)
6916
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
741
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
742 if(len){
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
743 printf("\n******** !!!!!!!! BUG!! len=%d !!!!!!!!!!! ********\n",len);
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
744 if(len>0) stream_skip(demuxer->stream, len);
2917b41c85ec fixed 'eof at 66s' bug
arpi
parents: 6423
diff changeset
745 }
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
746 }
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
747 }
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
748 #endif
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
749
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
750 return 1;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
751 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
752
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
753 void demux_open_real(demuxer_t* demuxer)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
754 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
755 real_priv_t* priv = demuxer->priv;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
756 int num_of_headers;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
757 int i;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
758
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
759 stream_skip(demuxer->stream, 4); /* header size */
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
760 stream_skip(demuxer->stream, 2); /* version */
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
761 // stream_skip(demuxer->stream, 4);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
762 i = stream_read_dword(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
763 mp_msg(MSGT_DEMUX,MSGL_V, "real: File version: %d\n", i);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
764 num_of_headers = stream_read_dword(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
765 // stream_skip(demuxer->stream, 4); /* number of headers */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
766
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
767 /* parse chunks */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
768 for (i = 1; i < num_of_headers; i++)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
769 {
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
770 int chunk_id, chunk_pos, chunk_size;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
771
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
772 chunk_pos = stream_tell(demuxer->stream);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
773 chunk_id = stream_read_dword_le(demuxer->stream);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
774 chunk_size = stream_read_dword(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
775
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
776 stream_skip(demuxer->stream, 2); /* version */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
778 if (chunk_size < 10)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
779 goto fail;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
780
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
781 mp_msg(MSGT_DEMUX,MSGL_V, "Chunk: %.4s (%x) (size: 0x%x, offset: 0x%x)\n",
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
782 (char *)&chunk_id, chunk_id, chunk_size, chunk_pos);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
783
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
784 switch(chunk_id)
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
785 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
786 case MKTAG('P', 'R', 'O', 'P'):
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
787 /* Properties header */
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
788
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
789 stream_skip(demuxer->stream, 4); /* max bitrate */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
790 stream_skip(demuxer->stream, 4); /* avg bitrate */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
791 stream_skip(demuxer->stream, 4); /* max packet size */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
792 stream_skip(demuxer->stream, 4); /* avg packet size */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
793 stream_skip(demuxer->stream, 4); /* nb packets */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
794 stream_skip(demuxer->stream, 4); /* duration */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
795 stream_skip(demuxer->stream, 4); /* preroll */
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
796 priv->index_chunk_offset = stream_read_dword(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
797 mp_msg(MSGT_DEMUX,MSGL_V,"First index chunk offset: 0x%x\n", priv->index_chunk_offset);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
798 priv->data_chunk_offset = stream_read_dword(demuxer->stream)+10;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
799 mp_msg(MSGT_DEMUX,MSGL_V,"First data chunk offset: 0x%x\n", priv->data_chunk_offset);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
800 stream_skip(demuxer->stream, 2); /* nb streams */
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
801 #if 0
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
802 stream_skip(demuxer->stream, 2); /* flags */
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
803 #else
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
804 {
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
805 int flags = stream_read_word(demuxer->stream);
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
806
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
807 if (flags)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
808 {
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
809 mp_msg(MSGT_DEMUX,MSGL_V,"Flags (%x): ", flags);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
810 if (flags & 0x1)
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
811 mp_msg(MSGT_DEMUX,MSGL_V,"[save allowed] ");
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
812 if (flags & 0x2)
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
813 mp_msg(MSGT_DEMUX,MSGL_V,"[perfect play (more buffers)] ");
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
814 if (flags & 0x4)
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
815 mp_msg(MSGT_DEMUX,MSGL_V,"[live broadcast] ");
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
816 mp_msg(MSGT_DEMUX,MSGL_V,"\n");
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
817 }
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
818 }
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
819 #endif
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
820 break;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
821 case MKTAG('C', 'O', 'N', 'T'):
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
822 {
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
823 /* Content description header */
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
824 char *buf;
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
825 int len;
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
826
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
827 len = stream_read_word(demuxer->stream);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
828 if (len > 0)
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
829 {
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
830 buf = malloc(len+1);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
831 stream_read(demuxer->stream, buf, len);
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5083
diff changeset
832 buf[len] = 0;
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
833 demux_info_add(demuxer, "name", buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
834 free(buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
835 }
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
836
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
837 len = stream_read_word(demuxer->stream);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
838 if (len > 0)
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
839 {
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
840 buf = malloc(len+1);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
841 stream_read(demuxer->stream, buf, len);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
842 buf[len] = 0;
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
843 demux_info_add(demuxer, "author", buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
844 free(buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
845 }
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
846
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
847 len = stream_read_word(demuxer->stream);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
848 if (len > 0)
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
849 {
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
850 buf = malloc(len+1);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
851 stream_read(demuxer->stream, buf, len);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
852 buf[len] = 0;
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
853 demux_info_add(demuxer, "copyright", buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
854 free(buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
855 }
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
856
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
857 len = stream_read_word(demuxer->stream);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
858 if (len > 0)
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
859 {
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
860 buf = malloc(len+1);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
861 stream_read(demuxer->stream, buf, len);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
862 buf[len] = 0;
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
863 demux_info_add(demuxer, "comment", buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
864 free(buf);
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
865 }
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
866 break;
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
867 }
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
868 case MKTAG('M', 'D', 'P', 'R'):
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
869 {
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
870 /* Media properties header */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
871 int stream_id;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
872 int bitrate;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
873 int codec_data_size;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
874 int codec_pos;
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
875 int tmp;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
876
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
877 stream_id = stream_read_word(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
878 mp_msg(MSGT_DEMUX,MSGL_V,"Found new stream (id: %d)\n", stream_id);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
879
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
880 stream_skip(demuxer->stream, 4); /* max bitrate */
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
881 bitrate = stream_read_dword(demuxer->stream); /* avg bitrate */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
882 stream_skip(demuxer->stream, 4); /* max packet size */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
883 stream_skip(demuxer->stream, 4); /* avg packet size */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
884 stream_skip(demuxer->stream, 4); /* start time */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
885 stream_skip(demuxer->stream, 4); /* preroll */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
886 stream_skip(demuxer->stream, 4); /* duration */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
887
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
888 skip_str(1, demuxer); /* stream description (name) */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
889 skip_str(1, demuxer); /* mimetype */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
890
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
891 /* Type specific header */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
892 codec_data_size = stream_read_dword(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
893 codec_pos = stream_tell(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
894
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
895 tmp = stream_read_dword(demuxer->stream);
7085
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
896
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
897 mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_real: type_spec: len=%d fpos=0x%X first_dword=0x%X (%.4s) \n",
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
898 (int)codec_data_size,(int)codec_pos,tmp,&tmp);
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
899
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
900 #if 1
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
901 // skip unknown shit - FIXME: find a better/cleaner way!
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
902 { int len=codec_data_size;
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
903 while(--len>=8){
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
904 if(tmp==MKTAG(0xfd, 'a', 'r', '.')) break; // audio
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
905 if(tmp==MKTAG('O', 'D', 'I', 'V')) break; // video
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
906 tmp=(tmp<<8)|stream_read_char(demuxer->stream);
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
907 }
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
908 }
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
909 #endif
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
910
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
911 #define stream_skip(st,siz) { int i; for(i=0;i<siz;i++) mp_msg(MSGT_DEMUX,MSGL_V," %02X",stream_read_char(st)); mp_msg(MSGT_DEMUX,MSGL_V,"\n");}
7085
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
912
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
913 if (tmp == MKTAG(0xfd, 'a', 'r', '.'))
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
914 {
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
915 /* audio header */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
916 sh_audio_t *sh = new_sh_audio(demuxer, stream_id);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
917 char buf[128]; /* for codec name */
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
918 int frame_size;
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
919 int sub_packet_size;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
920 int sub_packet_h;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
921 int version;
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
922 int flavor;
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
923
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
924 mp_msg(MSGT_DEMUX,MSGL_V,"Found audio stream!\n");
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
925 version = stream_read_word(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
926 mp_msg(MSGT_DEMUX,MSGL_V,"version: %d\n", version);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
927 // stream_skip(demuxer->stream, 2); /* version (4 or 5) */
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
928 stream_skip(demuxer->stream, 2); // 00 00
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
929 stream_skip(demuxer->stream, 4); /* .ra4 or .ra5 */
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
930 stream_skip(demuxer->stream, 4); // ???
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
931 stream_skip(demuxer->stream, 2); /* version (4 or 5) */
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
932 stream_skip(demuxer->stream, 4); // header size == 0x4E
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
933 flavor = stream_read_word(demuxer->stream);/* codec flavor id */
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
934 stream_skip(demuxer->stream, 4); /* coded frame size */
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
935 stream_skip(demuxer->stream, 4); // big number
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
936 stream_skip(demuxer->stream, 4); // bigger number
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
937 stream_skip(demuxer->stream, 4); // 2 || -''-
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
938 // stream_skip(demuxer->stream, 2); // 0x10
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
939 sub_packet_h = stream_read_word(demuxer->stream);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
940 // stream_skip(demuxer->stream, 2); /* coded frame size */
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
941 frame_size = stream_read_word(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
942 mp_msg(MSGT_DEMUX,MSGL_V,"frame_size: %d\n", frame_size);
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
943 sub_packet_size = stream_read_word(demuxer->stream);
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
944 mp_msg(MSGT_DEMUX,MSGL_V,"sub_packet_size: %d\n", sub_packet_size);
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
945 stream_skip(demuxer->stream, 2); // 0
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
946
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
947 if (version == 5)
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
948 stream_skip(demuxer->stream, 6); //0,srate,0
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
949
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
950 sh->samplerate = stream_read_word(demuxer->stream);
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
951 stream_skip(demuxer->stream, 2); // 0
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
952 sh->samplesize = stream_read_word(demuxer->stream)/8;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
953 sh->channels = stream_read_word(demuxer->stream);
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
954 mp_msg(MSGT_DEMUX,MSGL_V,"samplerate: %d, channels: %d\n",
3877
a3c73266f81f fixed rv10 with subid=3
alex
parents: 3795
diff changeset
955 sh->samplerate, sh->channels);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
956
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
957 if (version == 5)
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
958 {
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
959 stream_skip(demuxer->stream, 4); // "genr"
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
960 stream_read(demuxer->stream, buf, 4); // fourcc
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
961 buf[4] = 0;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
962 }
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
963 else
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
964 {
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
965 /* Desc #1 */
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
966 skip_str(1, demuxer);
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
967 /* Desc #2 */
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
968 get_str(1, demuxer, buf, sizeof(buf));
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
969 }
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
970
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
971 /* Emulate WAVEFORMATEX struct: */
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
972 sh->wf = malloc(sizeof(WAVEFORMATEX));
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
973 memset(sh->wf, 0, sizeof(WAVEFORMATEX));
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
974 sh->wf->nChannels = sh->channels;
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
975 sh->wf->wBitsPerSample = sh->samplesize*8;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
976 sh->wf->nSamplesPerSec = sh->samplerate;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
977 sh->wf->nAvgBytesPerSec = bitrate;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
978 sh->wf->nBlockAlign = frame_size;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
979 sh->wf->cbSize = 0;
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
980 sh->format = MKTAG(buf[0], buf[1], buf[2], buf[3]);
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
981
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
982 tmp = 1; /* supported audio codec */
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
983 switch (sh->format)
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
984 {
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
985 case MKTAG('d', 'n', 'e', 't'):
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
986 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: DNET -> AC3\n");
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
987 sh->format = 0x2000;
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
988 break;
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
989 case MKTAG('s', 'i', 'p', 'r'):
7105
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
990 #if 0
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
991 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: SiproLab's ACELP.net\n");
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
992 sh->format = 0x130;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
993 /* for buggy directshow loader */
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
994 sh->wf->cbSize = 4;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
995 sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+sh->wf->cbSize);
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
996 sh->wf->wBitsPerSample = 0;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
997 sh->wf->nAvgBytesPerSec = 1055;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
998 sh->wf->nBlockAlign = 19;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
999 // sh->wf->nBlockAlign = frame_size / 288;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1000 buf[0] = 30;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1001 buf[1] = 1;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1002 buf[2] = 1;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1003 buf[3] = 0;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1004 memcpy((sh->wf+18), (char *)&buf[0], 4);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1005 // sh->wf[sizeof(WAVEFORMATEX)+1] = 30;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1006 // sh->wf[sizeof(WAVEFORMATEX)+2] = 1;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1007 // sh->wf[sizeof(WAVEFORMATEX)+3] = 1;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1008 // sh->wf[sizeof(WAVEFORMATEX)+4] = 0;
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1009 break;
7105
79b00f519134 - added matrix cracking/debugging code - disabled
arpi
parents: 7085
diff changeset
1010 #endif
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1011 case MKTAG('c', 'o', 'o', 'k'):
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1012 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Real's GeneralCooker (?) (RealAudio G2?) (unsupported)\n");
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1013 sh->wf->cbSize = 4+2+24;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1014 sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+sh->wf->cbSize);
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1015 ((short*)(sh->wf+1))[0]=sub_packet_size;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1016 ((short*)(sh->wf+1))[1]=sub_packet_h;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1017 ((short*)(sh->wf+1))[2]=flavor;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1018 stream_read(demuxer->stream, ((char*)(sh->wf+1))+6, 24); // extras
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1019 break;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1020 case MKTAG('a', 't', 'r', 'c'):
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1021 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Sony ATRAC3 (RealAudio 8) (unsupported)\n");
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1022 sh->format = 0x270;
6374
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1023 /* 14 bytes extra header needed ! */
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1024 sh->wf->cbSize = 14;
b2d5aeb72f95 export subpacket-size and matrix w*h to the codec (cook)
arpi
parents: 6369
diff changeset
1025 sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+sh->wf->cbSize);
4235
c6a61c091222 fix dnet support
alex
parents: 3985
diff changeset
1026
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1027 sh->wf->nAvgBytesPerSec = 16537; // 8268
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1028 sh->wf->nBlockAlign = 384; // 192
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1029 sh->wf->wBitsPerSample = 0; /* from AVI created by VirtualDub */
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1030 break;
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1031 default:
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1032 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Unknown (%s)\n", buf);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1033 tmp = 0;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1034 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1035
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1036 sh->wf->wFormatTag = sh->format;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1037
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1038 print_wave_header(sh->wf);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1039
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1040 if (tmp)
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1041 {
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1042 /* insert as stream */
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1043 demuxer->audio->sh = sh;
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1044 sh->ds = demuxer->audio;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1045 // demuxer->audio->id = -1;//stream_id;
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
1046
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1047 if (priv->last_a_stream+1 < MAX_STREAMS)
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1048 {
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1049 priv->a_streams[priv->last_a_stream] = stream_id;
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1050 priv->last_a_stream++;
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1051 }
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1052 // priv->current_aid = stream_id;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1053 }
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1054 else
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1055 free(sh->wf);
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1056 // break;
6369
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
1057
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
1058 #undef stream_skip
63984a4cbbb6 export extra data for cook codec, some debug stuff
arpi
parents: 6344
diff changeset
1059
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1060 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1061 else
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1062 // case MKTAG('V', 'I', 'D', 'O'):
7085
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
1063 if(tmp == MKTAG('O', 'D', 'I', 'V'))
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1064 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1065 /* video header */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1066 sh_video_t *sh = new_sh_video(demuxer, stream_id);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1067
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1068 sh->format = stream_read_dword_le(demuxer->stream); /* fourcc */
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1069 mp_msg(MSGT_DEMUX,MSGL_V,"video fourcc: %.4s (%x)\n", (char *)&sh->format, sh->format);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1070
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1071 /* emulate BITMAPINFOHEADER */
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1072 sh->bih = malloc(sizeof(BITMAPINFOHEADER)+8);
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1073 memset(sh->bih, 0, sizeof(BITMAPINFOHEADER)+8);
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1074 sh->bih->biSize = 48;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1075 sh->disp_w = sh->bih->biWidth = stream_read_word(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1076 sh->disp_h = sh->bih->biHeight = stream_read_word(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1077 sh->bih->biPlanes = 1;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1078 sh->bih->biBitCount = 24;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1079 sh->bih->biCompression = sh->format;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1080 sh->bih->biSizeImage= sh->bih->biWidth*sh->bih->biHeight*3;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1081
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1082 sh->fps = stream_read_word(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1083 sh->frametime = 1.0f/sh->fps;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1084
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1085 #if 1
6414
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1086 stream_skip(demuxer->stream, 4);
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1087 #else
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1088 printf("unknown1: 0x%X \n",stream_read_dword(demuxer->stream));
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1089 printf("unknown2: 0x%X \n",stream_read_word(demuxer->stream));
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1090 printf("unknown3: 0x%X \n",stream_read_word(demuxer->stream));
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1091 #endif
6414
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1092 if (sh->format==0x30335652 ||
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1093 sh->format==0x30325652 ) {
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1094 sh->fps = stream_read_word(demuxer->stream);
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1095 sh->frametime = 1.0f/sh->fps;
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1096 } else {
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1097 stream_skip(demuxer->stream, 2);
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1098 }
67c1050a8718 fix fps/frametime parsing - patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 6404
diff changeset
1099 stream_skip(demuxer->stream, 2);
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1100
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1101 // read codec sub-format (to make difference between low and high rate codec)
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1102 ((unsigned int*)(sh->bih+1))[0]=stream_read_dword(demuxer->stream);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1103
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1104 /* h263 hack */
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1105 tmp = stream_read_dword(demuxer->stream);
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1106 ((unsigned int*)(sh->bih+1))[1]=tmp;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1107 mp_msg(MSGT_DEMUX,MSGL_V,"H.263 ID: %x\n", tmp);
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1108 switch (tmp)
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1109 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1110 case 0x10000000:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1111 /* sub id: 0 */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1112 /* codec id: rv10 */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1113 break;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1114 case 0x10003000:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1115 case 0x10003001:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1116 /* sub id: 3 */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1117 /* codec id: rv10 */
3877
a3c73266f81f fixed rv10 with subid=3
alex
parents: 3795
diff changeset
1118 sh->bih->biCompression = sh->format = mmioFOURCC('R', 'V', '1', '3');
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1119 break;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1120 case 0x20001000:
3788
d554b5b33d76 improved audio codec detection
alex
parents: 3777
diff changeset
1121 case 0x20100001:
7084
ffd4c6024cdb 10l - fixed chunktab size calculation
arpi
parents: 7081
diff changeset
1122 case 0x20200002:
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1123 /* codec id: rv20 */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1124 break;
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1125 case 0x30202002:
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1126 /* codec id: rv30 */
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1127 break;
6982
9037a1a34c94 RV40 support
arpi
parents: 6916
diff changeset
1128 case 0x40000000:
9037a1a34c94 RV40 support
arpi
parents: 6916
diff changeset
1129 /* codec id: rv40 */
9037a1a34c94 RV40 support
arpi
parents: 6916
diff changeset
1130 break;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1131 default:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1132 /* codec id: none */
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1133 mp_msg(MSGT_DEMUX,MSGL_V,"unknown id: %x\n", tmp);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1134 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1135
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1136 /* insert as stream */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1137 demuxer->video->sh = sh;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1138 sh->ds = demuxer->video;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1139 // demuxer->video->id = -1; //stream_id;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1140 if (priv->last_v_stream+1 < MAX_STREAMS)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1141 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1142 priv->v_streams[priv->last_v_stream] = stream_id;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1143 priv->last_v_stream++;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1144 }
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1145 // priv->current_vid = stream_id;
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1146 }
7085
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
1147 else {
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
1148 mp_msg(MSGT_DEMUX, MSGL_ERR, "Not audio/video stream or unsupported!\n");
02aa64b49b70 some files has some shit before teh audio/video headers...
arpi
parents: 7084
diff changeset
1149 }
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1150 // break;
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1151 // default:
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7105
diff changeset
1152 //skip_this_chunk:
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1153 /* skip codec info */
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1154 tmp = stream_tell(demuxer->stream) - codec_pos;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1155 mp_msg(MSGT_DEMUX,MSGL_V,"### skipping %d bytes of codec info\n", codec_data_size - tmp);
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1156 #if 0
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1157 { int i;
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1158 for(i=0;i<codec_data_size - tmp;i++)
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1159 printf(" %02X",stream_read_char(demuxer->stream));
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1160 printf("\n");
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1161 }
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1162 #else
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1163 stream_skip(demuxer->stream, codec_data_size - tmp);
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1164 #endif
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1165 break;
3985
701d18898835 updated/extended some parts, based on RMFF (also initial ATRAC3 hackings and notes)
alex
parents: 3882
diff changeset
1166 // }
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1167 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1168 case MKTAG('D', 'A', 'T', 'A'):
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1169 goto header_end;
3795
15745f11e717 fixed audio detection code and improved ;)
alex
parents: 3788
diff changeset
1170 case MKTAG('I', 'N', 'D', 'X'):
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1171 default:
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1172 mp_msg(MSGT_DEMUX,MSGL_V,"Unknown chunk: %x\n", chunk_id);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1173 stream_skip(demuxer->stream, chunk_size - 10);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1174 break;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1175 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1176 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1177
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1178 header_end:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1179 priv->num_of_packets = stream_read_dword(demuxer->stream);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1180 // stream_skip(demuxer->stream, 4); /* number of packets */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1181 stream_skip(demuxer->stream, 4); /* next data header */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1182
6340
7f612cf06ba5 sub-packet demuxer for rv20/rv30, patch by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents: 5918
diff changeset
1183 mp_msg(MSGT_DEMUX,MSGL_V,"Packets in file: %d\n", priv->num_of_packets);
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1184
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1185 if (priv->num_of_packets == 0)
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1186 priv->num_of_packets = -10;
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1187
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1188 /* disable seeking */
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1189 demuxer->seekable = 0;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1190
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1191 if (index_mode == 2)
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1192 generate_index(demuxer);
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1193 else if (priv->index_chunk_offset && ((index_mode == 1) || (index_mode == 2)))
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1194 parse_index_chunk(demuxer);
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1195
3777
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1196 fail:
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1197 return;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1198 }
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1199
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1200 void demux_close_real(demuxer_t *demuxer)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1201 {
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1202 real_priv_t* priv = demuxer->priv;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1203
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1204 if (priv)
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1205 free(priv);
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1206
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1207 return;
026ccd3dc489 added real demuxer
alex
parents:
diff changeset
1208 }
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1209
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1210 /* please upload RV10 samples WITH INDEX CHUNK */
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1211 int demux_seek_real(demuxer_t *demuxer, float rel_seek_secs, int flags)
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1212 {
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1213 real_priv_t *priv = demuxer->priv;
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1214 demux_stream_t *d_audio = demuxer->audio;
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1215 demux_stream_t *d_video = demuxer->video;
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1216 sh_audio_t *sh_audio = d_audio->sh;
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1217 sh_video_t *sh_video = d_video->sh;
6344
ecb9d82d1b64 - multiple audio/video stream support fixed
arpi
parents: 6340
diff changeset
1218 int vid = d_video->id, aid = d_audio->id;
6404
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
1219 int next_offset = 0;
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1220 int rel_seek_frames = 0;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1221 int streams = 0;
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1222
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1223 if ((index_mode != 1) && (index_mode != 2))
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1224 return 0;
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1225
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1226 if (sh_video)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1227 streams |= 1;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1228 if (sh_audio)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1229 streams |= 2;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1230
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1231 // printf("streams: %d\n", streams);
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1232
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1233 if (!streams)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1234 return 0;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1235
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1236 if (flags & 1)
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1237 /* seek absolute */
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1238 priv->current_apacket = priv->current_vpacket = 0;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1239
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1240 /* flags & 2 ? */
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1241 if (streams & 1)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1242 rel_seek_frames = (int)(sh_video->fps*rel_seek_secs);
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1243 else if (streams & 2)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1244 rel_seek_frames = (int)(rel_seek_secs);
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1245
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1246 // printf("rel_seek_frames: %d\n", rel_seek_frames);
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1247
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1248 if (streams & 2)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1249 priv->current_apacket += rel_seek_frames;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1250 if (streams & 1)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1251 priv->current_vpacket += rel_seek_frames;
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1252
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1253 if (
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1254 ((streams & 2) && (priv->current_apacket > priv->index_table_size[aid])) ||
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1255 ((streams & 1) && (priv->current_vpacket > priv->index_table_size[vid])) )
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1256 return 0;
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1257
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1258 /* both video and audio stream */
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1259 if (streams == 3)
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1260 {
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1261 // if (priv->current_apacket > priv->current_vpacket)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1262 // {
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1263 /* search keyframe */
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1264 while (!(priv->index_table[vid][priv->current_vpacket].flags & 0x2))
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1265 priv->current_vpacket++;
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1266 next_offset = priv->index_table[vid][priv->current_vpacket].offset;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1267 // }
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1268 // else
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1269 // {
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1270 // next_offset = priv->index_table[aid][priv->current_apacket].offset;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1271 // }
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1272 }
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1273 else
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1274 {
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1275 if (streams & 1)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1276 {
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1277 /* search keyframe */
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1278 while (!(priv->index_table[vid][priv->current_vpacket].flags & 0x2))
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1279 priv->current_vpacket++;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1280 next_offset = priv->index_table[vid][priv->current_vpacket].offset;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1281 }
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1282 else if (streams & 2)
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1283 {
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1284 next_offset = priv->index_table[aid][priv->current_apacket].offset;
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1285 }
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1286 }
5083
ce6952225939 added PRE-ALPHA seeking ability and index table generator (like avi's one)
alex
parents: 4328
diff changeset
1287
5918
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1288 // printf("seek: pos: %d, current packets: a: %d, v: %d\n",
dca3016882cf completed real seeking - working very well with audio only files
alex
parents: 5810
diff changeset
1289 // next_offset, priv->current_apacket, priv->current_vpacket);
6404
83b3315c679b Implement Nilmoni's and Bernd Ernesti's patches for:
atmos4
parents: 6374
diff changeset
1290 return stream_seek(demuxer->stream, next_offset);
3882
c5cefeb78c40 added read_index_chunk, fixed audio_header parser for version5
alex
parents: 3877
diff changeset
1291 }