annotate libmpdemux/demux_realaud.c @ 22998:85343b921fef

Fix preprocessor conditionals: libdvdnav includes libdvdread and configure enables libdvdread support if libdvdnav is found. There is no need to check separately in the source with the preprocessor.
author diego
date Wed, 18 Apr 2007 09:56:24 +0000
parents 4d81dbdf46b9
children d4fe6e23283e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
1 /*
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
2 Realaudio demuxer for MPlayer
14908
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
3 (c) 2003, 2005 Roberto Togni
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
4 */
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
5
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
6 #include <stdio.h>
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
7 #include <stdlib.h>
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
8 #include <unistd.h>
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
9
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
10 #include "config.h"
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
11 #include "mp_msg.h"
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
12 #include "help_mp.h"
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
13
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 21987
diff changeset
14 #include "stream/stream.h"
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
15 #include "demuxer.h"
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
16 #include "stheader.h"
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
17
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
18
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
19 #define FOURCC_DOTRA mmioFOURCC('.','r','a', 0xfd)
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
20 #define FOURCC_144 mmioFOURCC('1','4','_','4')
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
21 #define FOURCC_288 mmioFOURCC('2','8','_','8')
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
22 #define FOURCC_DNET mmioFOURCC('d','n','e','t')
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
23 #define FOURCC_LPCJ mmioFOURCC('l','p','c','J')
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
24 #define FOURCC_SIPR mmioFOURCC('s','i','p','r')
21987
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
25 #define INTLID_INT4 mmioFOURCC('I','n','t','4')
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
26 #define INTLID_SIPR mmioFOURCC('s','i','p','r')
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
27
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
28
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
29 static unsigned char sipr_swaps[38][2]={
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
30 {0,63},{1,22},{2,44},{3,90},{5,81},{7,31},{8,86},{9,58},{10,36},{12,68},
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
31 {13,39},{14,73},{15,53},{16,69},{17,57},{19,88},{20,34},{21,71},{24,46},
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
32 {25,94},{26,54},{28,75},{29,50},{32,70},{33,92},{35,74},{38,85},{40,56},
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
33 {42,87},{43,65},{45,59},{48,79},{49,93},{51,89},{55,95},{61,76},{67,83},
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
34 {77,80} };
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
35
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
36 // Map flavour to bytes per second
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
37 static int sipr_fl2bps[4] = {813, 1062, 625, 2000}; // 6.5, 8.5, 5, 16 kbit per second
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
38
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
39
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
40 typedef struct {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
41 unsigned short version;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
42 unsigned int dotranum;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
43 unsigned int data_size;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
44 unsigned short version2;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
45 unsigned int hdr_size;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
46 unsigned short codec_flavor;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
47 unsigned int coded_framesize;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
48 unsigned short sub_packet_h;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
49 unsigned short frame_size;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
50 unsigned short sub_packet_size;
21987
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
51 unsigned intl_id;
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
52 unsigned char *audio_buf;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
53 } ra_priv_t;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
54
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
55
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
56
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
57 static int ra_check_file(demuxer_t* demuxer)
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
58 {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
59 unsigned int chunk_id;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
60
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
61 chunk_id = stream_read_dword_le(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
62 if (chunk_id == FOURCC_DOTRA)
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
63 return DEMUXER_TYPE_REALAUDIO;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
64 else
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
65 return 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
66 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
67
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
68
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
69
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
70 // return value:
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
71 // 0 = EOF or no stream found
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
72 // 1 = successfully read a packet
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
73 static int demux_ra_fill_buffer(demuxer_t *demuxer, demux_stream_t *dsds)
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
74 {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
75 ra_priv_t *ra_priv = demuxer->priv;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
76 int len;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
77 demux_stream_t *ds = demuxer->audio;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
78 sh_audio_t *sh = ds->sh;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
79 WAVEFORMATEX *wf = sh->wf;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
80 demux_packet_t *dp;
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
81 int x, y;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
82
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
83 if (demuxer->stream->eof)
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
84 return 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
85
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
86 len = wf->nBlockAlign;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
87 demuxer->filepos = stream_tell(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
88
21987
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
89 if ((ra_priv->intl_id == INTLID_INT4) || (ra_priv->intl_id == INTLID_SIPR)) {
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
90 if (ra_priv->intl_id == INTLID_SIPR) {
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
91 int n;
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
92 int bs = ra_priv->sub_packet_h * ra_priv->frame_size * 2 / 96; // nibbles per subpacket
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
93 stream_read(demuxer->stream, ra_priv->audio_buf, ra_priv->sub_packet_h * ra_priv->frame_size);
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
94 // Perform reordering
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
95 for(n = 0; n < 38; n++) {
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
96 int j;
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
97 int i = bs * sipr_swaps[n][0];
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
98 int o = bs * sipr_swaps[n][1];
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
99 // swap nibbles of block 'i' with 'o' TODO: optimize
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
100 for(j = 0; j < bs; j++) {
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
101 int x = (i & 1) ? (ra_priv->audio_buf[i >> 1] >> 4) : (ra_priv->audio_buf[i >> 1] & 0x0F);
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
102 int y = (o & 1) ? (ra_priv->audio_buf[o >> 1] >> 4) : (ra_priv->audio_buf[o >> 1] & 0x0F);
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
103 if(o & 1)
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
104 ra_priv->audio_buf[o >> 1] = (ra_priv->audio_buf[o >> 1] & 0x0F) | (x << 4);
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
105 else
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
106 ra_priv->audio_buf[o >> 1] = (ra_priv->audio_buf[o >> 1] & 0xF0) | x;
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
107 if(i & 1)
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
108 ra_priv->audio_buf[i >> 1] = (ra_priv->audio_buf[i >> 1] & 0x0F) | (y << 4);
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
109 else
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
110 ra_priv->audio_buf[i >> 1] = (ra_priv->audio_buf[i >> 1] & 0xF0) | y;
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
111 ++i; ++o;
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
112 }
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
113 }
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
114 } else {
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
115 for (y = 0; y < ra_priv->sub_packet_h; y++)
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
116 for (x = 0; x < ra_priv->sub_packet_h / 2; x++)
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
117 stream_read(demuxer->stream, ra_priv->audio_buf + x * 2 *ra_priv->frame_size +
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
118 y * ra_priv->coded_framesize, ra_priv->coded_framesize);
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
119 }
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
120 // Release all the audio packets
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
121 for (x = 0; x < ra_priv->sub_packet_h * ra_priv->frame_size / len; x++) {
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
122 dp = new_demux_packet(len);
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
123 memcpy(dp->buffer, ra_priv->audio_buf + x * len, len);
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
124 dp->pts = x ? 0 : demuxer->filepos / ra_priv->data_size;
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
125 dp->pos = demuxer->filepos; // all equal
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
126 dp->flags = x ? 0 : 0x10; // Mark first packet as keyframe
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
127 ds_add_packet(ds, dp);
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
128 }
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
129 } else {
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
130 dp = new_demux_packet(len);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
131 stream_read(demuxer->stream, dp->buffer, len);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
132
10035
d4ecf93e236a Remove broker reset/seek and fix ;;
rtognimp
parents: 10034
diff changeset
133 dp->pts = demuxer->filepos / ra_priv->data_size;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
134 dp->pos = demuxer->filepos;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
135 dp->flags = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
136 ds_add_packet(ds, dp);
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
137 }
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
138
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
139 return 1;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
140 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
141
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
142
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
143
17977
f70772d02eaa Convert printfs in aviprint.c to mp_msg and give the information printing
diego
parents: 17636
diff changeset
144 extern void print_wave_header(WAVEFORMATEX *h, int verbose_level);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
145
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
146
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
147
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
148 static demuxer_t* demux_open_ra(demuxer_t* demuxer)
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
149 {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
150 ra_priv_t* ra_priv = demuxer->priv;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
151 sh_audio_t *sh;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
152 int i;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
153 char *buf;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
154
19062
83c3afeab35d drops casts from void * on malloc/calloc from libmpdemux code
reynaldo
parents: 18958
diff changeset
155 if ((ra_priv = malloc(sizeof(ra_priv_t))) == NULL) {
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
156 mp_msg(MSGT_DEMUX, MSGL_ERR, "[RealAudio] Can't allocate memory for private data.\n");
10232
939ff11825de Warning fixes, patch by Dominik Mierzejewski
rtognimp
parents: 10124
diff changeset
157 return 0;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
158 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
159 memset(ra_priv, 0, sizeof(ra_priv_t));
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
160
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
161 demuxer->priv = ra_priv;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
162 sh = new_sh_audio(demuxer, 0);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
163 demuxer->audio->id = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
164 sh->ds=demuxer->audio;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
165 demuxer->audio->sh = sh;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
166
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
167 ra_priv->version = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
168 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] File version: %d\n", ra_priv->version);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
169 if ((ra_priv->version < 3) || (ra_priv->version > 4)) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
170 mp_msg(MSGT_DEMUX,MSGL_WARN,"[RealAudio] ra version %d is not supported yet, please "
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
171 "contact MPlayer developers\n", ra_priv->version);
10232
939ff11825de Warning fixes, patch by Dominik Mierzejewski
rtognimp
parents: 10124
diff changeset
172 return 0;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
173 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
174 if (ra_priv->version == 3) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
175 ra_priv->hdr_size = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
176 stream_skip(demuxer->stream, 10);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
177 ra_priv->data_size = stream_read_dword(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
178 } else {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
179 stream_skip(demuxer->stream, 2);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
180 ra_priv->dotranum = stream_read_dword(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
181 ra_priv->data_size = stream_read_dword(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
182 ra_priv->version2 = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
183 ra_priv->hdr_size = stream_read_dword(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
184 ra_priv->codec_flavor = stream_read_word(demuxer->stream);
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
185 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] Flavor: %d\n", ra_priv->codec_flavor);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
186 ra_priv->coded_framesize = stream_read_dword(demuxer->stream);
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
187 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] Coded frame size: %d\n", ra_priv->coded_framesize);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
188 stream_skip(demuxer->stream, 4); // data size?
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
189 stream_skip(demuxer->stream, 8);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
190 ra_priv->sub_packet_h = stream_read_word(demuxer->stream);
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
191 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] Sub packet h: %d\n", ra_priv->sub_packet_h);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
192 ra_priv->frame_size = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
193 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] Frame size: %d\n", ra_priv->frame_size);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
194 ra_priv->sub_packet_size = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
195 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] Sub packet size: %d\n", ra_priv->sub_packet_size);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
196 stream_skip(demuxer->stream, 2);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
197 sh->samplerate = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
198 stream_skip(demuxer->stream, 2);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
199 sh->samplesize = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
200 sh->channels = stream_read_word(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
201 mp_msg(MSGT_DEMUX,MSGL_V,"[RealAudio] %d channel, %d bit, %dHz\n", sh->channels,
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
202 sh->samplesize, sh->samplerate);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
203 i = stream_read_char(demuxer->stream);
21987
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
204 ra_priv->intl_id = stream_read_dword_le(demuxer->stream);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
205 if (i != 4) {
21987
fed73db9ddb1 Use interleaver id to select the correct interleaver instead of guessing
rtogni
parents: 21421
diff changeset
206 mp_msg(MSGT_DEMUX,MSGL_WARN,"[RealAudio] Interleaver Id size is not 4 (%d), please report to "
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
207 "MPlayer developers\n", i);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
208 stream_skip(demuxer->stream, i - 4);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
209 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
210 i = stream_read_char(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
211 sh->format = stream_read_dword_le(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
212 if (i != 4) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
213 mp_msg(MSGT_DEMUX,MSGL_WARN,"[RealAudio] FourCC size is not 4 (%d), please report to "
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
214 "MPlayer developers\n", i);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
215 stream_skip(demuxer->stream, i - 4);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
216 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
217 stream_skip(demuxer->stream, 3);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
218 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
219
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
220 if ((i = stream_read_char(demuxer->stream)) != 0) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
221 buf = malloc(i+1);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
222 stream_read(demuxer->stream, buf, i);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
223 buf[i] = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
224 demux_info_add(demuxer, "Title", buf);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
225 free(buf);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
226 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
227 if ((i = stream_read_char(demuxer->stream)) != 0) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
228 buf = malloc(i+1);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
229 stream_read(demuxer->stream, buf, i);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
230 buf[i] = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
231 demux_info_add(demuxer, "Author", buf);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
232 free(buf);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
233 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
234 if ((i = stream_read_char(demuxer->stream)) != 0) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
235 buf = malloc(i+1);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
236 stream_read(demuxer->stream, buf, i);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
237 buf[i] = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
238 demux_info_add(demuxer, "Copyright", buf);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
239 free(buf);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
240 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
241
14908
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
242 if ((i = stream_read_char(demuxer->stream)) != 0) {
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
243 buf = malloc(i+1);
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
244 stream_read(demuxer->stream, buf, i);
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
245 buf[i] = 0;
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
246 demux_info_add(demuxer, "Comment", buf);
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
247 free(buf);
82344f91104a Fix some 28.8 ra files with four text strings
rtognimp
parents: 11544
diff changeset
248 }
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
249
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
250 if (ra_priv->version == 3) {
14909
aa6715eaa28c Fix very old ra files with no fourcc
rtognimp
parents: 14908
diff changeset
251 if(ra_priv->hdr_size + 8 > stream_tell(demuxer->stream)) {
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
252 stream_skip(demuxer->stream, 1);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
253 i = stream_read_char(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
254 sh->format = stream_read_dword_le(demuxer->stream);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
255 if (i != 4) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
256 mp_msg(MSGT_DEMUX,MSGL_WARN,"[RealAudio] FourCC size is not 4 (%d), please report to "
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
257 "MPlayer developers\n", i);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
258 stream_skip(demuxer->stream, i - 4);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
259 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
260
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
261 if (sh->format != FOURCC_LPCJ) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
262 mp_msg(MSGT_DEMUX,MSGL_WARN,"[RealAudio] Version 3 with FourCC %8x, please report to "
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
263 "MPlayer developers\n", sh->format);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
264 }
14909
aa6715eaa28c Fix very old ra files with no fourcc
rtognimp
parents: 14908
diff changeset
265 } else
aa6715eaa28c Fix very old ra files with no fourcc
rtognimp
parents: 14908
diff changeset
266 // If a stream does not have fourcc, let's assume it's 14.4
aa6715eaa28c Fix very old ra files with no fourcc
rtognimp
parents: 14908
diff changeset
267 sh->format = FOURCC_LPCJ;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
268
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
269 sh->channels = 1;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
270 sh->samplesize = 16;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
271 sh->samplerate = 8000;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
272 ra_priv->frame_size = 240;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
273 sh->format = FOURCC_144;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
274 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
275
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
276 /* Fill WAVEFORMATEX */
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
277 sh->wf = malloc(sizeof(WAVEFORMATEX));
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
278 memset(sh->wf, 0, sizeof(WAVEFORMATEX));
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
279 sh->wf->nChannels = sh->channels;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
280 sh->wf->wBitsPerSample = sh->samplesize;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
281 sh->wf->nSamplesPerSec = sh->samplerate;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
282 sh->wf->nAvgBytesPerSec = sh->samplerate*sh->samplesize/8;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
283 sh->wf->nBlockAlign = ra_priv->frame_size;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
284 sh->wf->cbSize = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
285 sh->wf->wFormatTag = sh->format;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
286
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
287 switch (sh->format) {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
288 case FOURCC_144:
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
289 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: 14_4\n");
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
290 sh->wf->nBlockAlign = 0x14;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
291 break;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
292 case FOURCC_288:
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
293 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: 28_8\n");
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
294 sh->wf->nBlockAlign = ra_priv->coded_framesize;
18505
01b9f29c2fb5 Fix some potential integer overflow in memory allocation (mot of these
rtognimp
parents: 17977
diff changeset
295 ra_priv->audio_buf = calloc(ra_priv->sub_packet_h, ra_priv->frame_size);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
296 break;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
297 case FOURCC_DNET:
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
298 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: DNET -> AC3\n");
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
299 break;
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
300 case FOURCC_SIPR:
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
301 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: SIPR\n");
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
302 sh->wf->nBlockAlign = ra_priv->coded_framesize;
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
303 sh->wf->nAvgBytesPerSec = sipr_fl2bps[ra_priv->codec_flavor];
18505
01b9f29c2fb5 Fix some potential integer overflow in memory allocation (mot of these
rtognimp
parents: 17977
diff changeset
304 ra_priv->audio_buf = calloc(ra_priv->sub_packet_h, ra_priv->frame_size);
17400
7dd65dccf4f5 Support sipr codec in old RealAudio files.
rtognimp
parents: 17149
diff changeset
305 break;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
306 default:
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
307 mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Unknown (%d)\n", sh->format);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
308 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
309
17977
f70772d02eaa Convert printfs in aviprint.c to mp_msg and give the information printing
diego
parents: 17636
diff changeset
310 print_wave_header(sh->wf, MSGL_V);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
311
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
312 /* disable seeking */
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
313 demuxer->seekable = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
314
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
315 if(!ds_fill_buffer(demuxer->audio))
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
316 mp_msg(MSGT_DEMUXER,MSGL_INFO,"[RealAudio] No data.\n");
10232
939ff11825de Warning fixes, patch by Dominik Mierzejewski
rtognimp
parents: 10124
diff changeset
317
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
318 return demuxer;
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
319 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
320
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
321
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
322
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
323 static void demux_close_ra(demuxer_t *demuxer)
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
324 {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
325 ra_priv_t* ra_priv = demuxer->priv;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
326
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
327 if (ra_priv) {
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
328 if (ra_priv->audio_buf)
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
329 free (ra_priv->audio_buf);
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
330 free(ra_priv);
17149
9a0a376a54b1 Move audio packets reordering from codec interface to demuxers for real
rtognimp
parents: 16322
diff changeset
331 }
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
332 return;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
333 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
334
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
335
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
336 #if 0
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
337 /* please upload RV10 samples WITH INDEX CHUNK */
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17569
diff changeset
338 int demux_seek_ra(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags)
10034
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
339 {
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
340 real_priv_t *priv = demuxer->priv;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
341 demux_stream_t *d_audio = demuxer->audio;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
342 sh_audio_t *sh_audio = d_audio->sh;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
343 int aid = d_audio->id;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
344 int next_offset = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
345 int rel_seek_frames = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
346 int streams = 0;
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
347
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
348 return stream_seek(demuxer->stream, next_offset);
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
349 }
4f434f04b5bf Realaudio support
rtognimp
parents:
diff changeset
350 #endif
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
351
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
352
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
353 demuxer_desc_t demuxer_desc_realaudio = {
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
354 "Realaudio demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
355 "realaudio",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
356 "REALAUDIO",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
357 "Roberto Togni",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
358 "handles old audio only .ra files",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
359 DEMUXER_TYPE_REALAUDIO,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
360 1, // safe autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
361 ra_check_file,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
362 demux_ra_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
363 demux_open_ra,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
364 demux_close_ra,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
365 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
366 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 14909
diff changeset
367 };