annotate rm.c @ 1680:9240521ca4fd libavformat

this is wrong but it was that way before the AVCodecTag change, only reason why it didnt broke regressions was that the table wasnt used
author michael
date Sun, 21 Jan 2007 12:30:44 +0000
parents 404048ea11bc
children a27976be3394
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1 /*
1415
3b00fb8ef8e4 replace coder/decoder file description in libavformat by muxer/demuxer
aurel
parents: 1358
diff changeset
2 * "Real" compatible muxer and demuxer.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
3 * Copyright (c) 2000, 2001 Fabrice Bellard.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
4 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1350
diff changeset
5 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1350
diff changeset
6 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1350
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1350
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
11 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1350
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
15 * Lesser General Public License for more details.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
16 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1350
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 888
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
20 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
21 #include "avformat.h"
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
22
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
23 /* in ms */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
24 #define BUFFER_DURATION 0
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
25
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
26 typedef struct {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
27 int nb_packets;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
28 int packet_total_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
29 int packet_max_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
30 /* codec related output */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
31 int bit_rate;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
32 float frame_rate;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
33 int nb_frames; /* current frame number */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
34 int total_frames; /* total number of frames */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
35 int num;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
36 AVCodecContext *enc;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
37 } StreamInfo;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
38
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
39 typedef struct {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
40 StreamInfo streams[2];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
41 StreamInfo *audio_stream, *video_stream;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
42 int data_pos; /* position of the data after the header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
43 int nb_packets;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
44 int old_format;
609
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
45 int current_stream;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
46 int remaining_len;
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
47 /// Audio descrambling matrix parameters
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
48 uint8_t *audiobuf; ///< place to store reordered audio data
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
49 int64_t audiotimestamp; ///< Audio packet timestamp
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
50 int sub_packet_cnt; // Subpacket counter, used while reading
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
51 int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
52 int audio_stream_num; ///< Stream number for audio packets
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
53 int audio_pkt_cnt; ///< Output packet counter
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
54 int audio_framesize; /// Audio frame size from container
1105
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
55 int sub_packet_lengths[16]; /// Length of each aac subpacket
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
56 } RMContext;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
57
858
66cc656ea404 Replace CONFIG_ENCODERS/CONFIG_DECODERS with CONFIG_MUXERS/CONFIG_DEMUXERS
diego
parents: 820
diff changeset
58 #ifdef CONFIG_MUXERS
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
59 static void put_str(ByteIOContext *s, const char *tag)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
60 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
61 put_be16(s,strlen(tag));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
62 while (*tag) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
63 put_byte(s, *tag++);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
64 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
65 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
66
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
67 static void put_str8(ByteIOContext *s, const char *tag)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
68 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
69 put_byte(s, strlen(tag));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
70 while (*tag) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
71 put_byte(s, *tag++);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
72 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
73 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
74
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
75 static void rv10_write_header(AVFormatContext *ctx,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
76 int data_size, int index_pos)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
77 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
78 RMContext *rm = ctx->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
79 ByteIOContext *s = &ctx->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
80 StreamInfo *stream;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
81 unsigned char *data_offset_ptr, *start_ptr;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
82 const char *desc, *mimetype;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
83 int nb_packets, packet_total_size, packet_max_size, size, packet_avg_size, i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
84 int bit_rate, v, duration, flags, data_pos;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
85
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
86 start_ptr = s->buf_ptr;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
87
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
88 put_tag(s, ".RMF");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
89 put_be32(s,18); /* header size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
90 put_be16(s,0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
91 put_be32(s,0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
92 put_be32(s,4 + ctx->nb_streams); /* num headers */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
93
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
94 put_tag(s,"PROP");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
95 put_be32(s, 50);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
96 put_be16(s, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
97 packet_max_size = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
98 packet_total_size = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
99 nb_packets = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
100 bit_rate = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
101 duration = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
102 for(i=0;i<ctx->nb_streams;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
103 StreamInfo *stream = &rm->streams[i];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
104 bit_rate += stream->bit_rate;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
105 if (stream->packet_max_size > packet_max_size)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
106 packet_max_size = stream->packet_max_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
107 nb_packets += stream->nb_packets;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
108 packet_total_size += stream->packet_total_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
109 /* select maximum duration */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
110 v = (int) (1000.0 * (float)stream->total_frames / stream->frame_rate);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
111 if (v > duration)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
112 duration = v;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
113 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
114 put_be32(s, bit_rate); /* max bit rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
115 put_be32(s, bit_rate); /* avg bit rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
116 put_be32(s, packet_max_size); /* max packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
117 if (nb_packets > 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
118 packet_avg_size = packet_total_size / nb_packets;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
119 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
120 packet_avg_size = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
121 put_be32(s, packet_avg_size); /* avg packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
122 put_be32(s, nb_packets); /* num packets */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
123 put_be32(s, duration); /* duration */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
124 put_be32(s, BUFFER_DURATION); /* preroll */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
125 put_be32(s, index_pos); /* index offset */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
126 /* computation of data the data offset */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
127 data_offset_ptr = s->buf_ptr;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
128 put_be32(s, 0); /* data offset : will be patched after */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
129 put_be16(s, ctx->nb_streams); /* num streams */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
130 flags = 1 | 2; /* save allowed & perfect play */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
131 if (url_is_streamed(s))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
132 flags |= 4; /* live broadcast */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
133 put_be16(s, flags);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
134
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
135 /* comments */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
136
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
137 put_tag(s,"CONT");
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
138 size = strlen(ctx->title) + strlen(ctx->author) + strlen(ctx->copyright) +
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
139 strlen(ctx->comment) + 4 * 2 + 10;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
140 put_be32(s,size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
141 put_be16(s,0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
142 put_str(s, ctx->title);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
143 put_str(s, ctx->author);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
144 put_str(s, ctx->copyright);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
145 put_str(s, ctx->comment);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
146
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
147 for(i=0;i<ctx->nb_streams;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
148 int codec_data_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
149
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
150 stream = &rm->streams[i];
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
151
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
152 if (stream->enc->codec_type == CODEC_TYPE_AUDIO) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
153 desc = "The Audio Stream";
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
154 mimetype = "audio/x-pn-realaudio";
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
155 codec_data_size = 73;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
156 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
157 desc = "The Video Stream";
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
158 mimetype = "video/x-pn-realvideo";
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
159 codec_data_size = 34;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
160 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
161
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
162 put_tag(s,"MDPR");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
163 size = 10 + 9 * 4 + strlen(desc) + strlen(mimetype) + codec_data_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
164 put_be32(s, size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
165 put_be16(s, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
166
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
167 put_be16(s, i); /* stream number */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
168 put_be32(s, stream->bit_rate); /* max bit rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
169 put_be32(s, stream->bit_rate); /* avg bit rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
170 put_be32(s, stream->packet_max_size); /* max packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
171 if (stream->nb_packets > 0)
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
172 packet_avg_size = stream->packet_total_size /
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
173 stream->nb_packets;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
174 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
175 packet_avg_size = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
176 put_be32(s, packet_avg_size); /* avg packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
177 put_be32(s, 0); /* start time */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
178 put_be32(s, BUFFER_DURATION); /* preroll */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
179 /* duration */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
180 if (url_is_streamed(s) || !stream->total_frames)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
181 put_be32(s, (int)(3600 * 1000));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
182 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
183 put_be32(s, (int)(stream->total_frames * 1000 / stream->frame_rate));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
184 put_str8(s, desc);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
185 put_str8(s, mimetype);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
186 put_be32(s, codec_data_size);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
187
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
188 if (stream->enc->codec_type == CODEC_TYPE_AUDIO) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
189 int coded_frame_size, fscode, sample_rate;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
190 sample_rate = stream->enc->sample_rate;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
191 coded_frame_size = (stream->enc->bit_rate *
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
192 stream->enc->frame_size) / (8 * sample_rate);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
193 /* audio codec info */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
194 put_tag(s, ".ra");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
195 put_byte(s, 0xfd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
196 put_be32(s, 0x00040000); /* version */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
197 put_tag(s, ".ra4");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
198 put_be32(s, 0x01b53530); /* stream length */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
199 put_be16(s, 4); /* unknown */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
200 put_be32(s, 0x39); /* header size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
201
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
202 switch(sample_rate) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
203 case 48000:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
204 case 24000:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
205 case 12000:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
206 fscode = 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
207 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
208 default:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
209 case 44100:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
210 case 22050:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
211 case 11025:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
212 fscode = 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
213 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
214 case 32000:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
215 case 16000:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
216 case 8000:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
217 fscode = 3;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
218 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
219 put_be16(s, fscode); /* codec additional info, for AC3, seems
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
220 to be a frequency code */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
221 /* special hack to compensate rounding errors... */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
222 if (coded_frame_size == 557)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
223 coded_frame_size--;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
224 put_be32(s, coded_frame_size); /* frame length */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
225 put_be32(s, 0x51540); /* unknown */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
226 put_be32(s, 0x249f0); /* unknown */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
227 put_be32(s, 0x249f0); /* unknown */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
228 put_be16(s, 0x01);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
229 /* frame length : seems to be very important */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
230 put_be16(s, coded_frame_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
231 put_be32(s, 0); /* unknown */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
232 put_be16(s, stream->enc->sample_rate); /* sample rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
233 put_be32(s, 0x10); /* unknown */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
234 put_be16(s, stream->enc->channels);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
235 put_str8(s, "Int0"); /* codec name */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
236 put_str8(s, "dnet"); /* codec name */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
237 put_be16(s, 0); /* title length */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
238 put_be16(s, 0); /* author length */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
239 put_be16(s, 0); /* copyright length */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
240 put_byte(s, 0); /* end of header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
241 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
242 /* video codec info */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
243 put_be32(s,34); /* size */
614
cbcb3ae970c8 rv20 encoding
michael
parents: 613
diff changeset
244 if(stream->enc->codec_id == CODEC_ID_RV10)
cbcb3ae970c8 rv20 encoding
michael
parents: 613
diff changeset
245 put_tag(s,"VIDORV10");
cbcb3ae970c8 rv20 encoding
michael
parents: 613
diff changeset
246 else
cbcb3ae970c8 rv20 encoding
michael
parents: 613
diff changeset
247 put_tag(s,"VIDORV20");
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
248 put_be16(s, stream->enc->width);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
249 put_be16(s, stream->enc->height);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
250 put_be16(s, (int) stream->frame_rate); /* frames per seconds ? */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
251 put_be32(s,0); /* unknown meaning */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
252 put_be16(s, (int) stream->frame_rate); /* unknown meaning */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
253 put_be32(s,0); /* unknown meaning */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
254 put_be16(s, 8); /* unknown meaning */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
255 /* Seems to be the codec version: only use basic H263. The next
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
256 versions seems to add a diffential DC coding as in
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
257 MPEG... nothing new under the sun */
614
cbcb3ae970c8 rv20 encoding
michael
parents: 613
diff changeset
258 if(stream->enc->codec_id == CODEC_ID_RV10)
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
259 put_be32(s,0x10000000);
614
cbcb3ae970c8 rv20 encoding
michael
parents: 613
diff changeset
260 else
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
261 put_be32(s,0x20103001);
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
262 //put_be32(s,0x10003000);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
263 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
264 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
265
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
266 /* patch data offset field */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
267 data_pos = s->buf_ptr - start_ptr;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
268 rm->data_pos = data_pos;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
269 data_offset_ptr[0] = data_pos >> 24;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
270 data_offset_ptr[1] = data_pos >> 16;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
271 data_offset_ptr[2] = data_pos >> 8;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
272 data_offset_ptr[3] = data_pos;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
273
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
274 /* data stream */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
275 put_tag(s,"DATA");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
276 put_be32(s,data_size + 10 + 8);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
277 put_be16(s,0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
278
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
279 put_be32(s, nb_packets); /* number of packets */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
280 put_be32(s,0); /* next data header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
281 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
282
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
283 static void write_packet_header(AVFormatContext *ctx, StreamInfo *stream,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
284 int length, int key_frame)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
285 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
286 int timestamp;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
287 ByteIOContext *s = &ctx->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
288
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
289 stream->nb_packets++;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
290 stream->packet_total_size += length;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
291 if (length > stream->packet_max_size)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
292 stream->packet_max_size = length;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
293
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
294 put_be16(s,0); /* version */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
295 put_be16(s,length + 12);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
296 put_be16(s, stream->num); /* stream number */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
297 timestamp = (1000 * (float)stream->nb_frames) / stream->frame_rate;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
298 put_be32(s, timestamp); /* timestamp */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
299 put_byte(s, 0); /* reserved */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
300 put_byte(s, key_frame ? 2 : 0); /* flags */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
301 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
302
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
303 static int rm_write_header(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
304 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
305 RMContext *rm = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
306 StreamInfo *stream;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
307 int n;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
308 AVCodecContext *codec;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
309
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
310 for(n=0;n<s->nb_streams;n++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
311 s->streams[n]->id = n;
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
312 codec = s->streams[n]->codec;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
313 stream = &rm->streams[n];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
314 memset(stream, 0, sizeof(StreamInfo));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
315 stream->num = n;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
316 stream->bit_rate = codec->bit_rate;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
317 stream->enc = codec;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
318
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
319 switch(codec->codec_type) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
320 case CODEC_TYPE_AUDIO:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
321 rm->audio_stream = stream;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
322 stream->frame_rate = (float)codec->sample_rate / (float)codec->frame_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
323 /* XXX: dummy values */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
324 stream->packet_max_size = 1024;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
325 stream->nb_packets = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
326 stream->total_frames = stream->nb_packets;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
327 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
328 case CODEC_TYPE_VIDEO:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
329 rm->video_stream = stream;
743
af4e24d6310c switch to native time bases
michael
parents: 736
diff changeset
330 stream->frame_rate = (float)codec->time_base.den / (float)codec->time_base.num;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
331 /* XXX: dummy values */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
332 stream->packet_max_size = 4096;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
333 stream->nb_packets = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
334 stream->total_frames = stream->nb_packets;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
335 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
336 default:
537
558a093b04db do not call (av_)abort()
michael
parents: 509
diff changeset
337 return -1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
338 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
339 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
340
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
341 rv10_write_header(s, 0, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
342 put_flush_packet(&s->pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
343 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
344 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
345
470
334e08488ad1 correctly interleave packets during encoding
michael
parents: 468
diff changeset
346 static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int flags)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
347 {
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 33
diff changeset
348 uint8_t *buf1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
349 RMContext *rm = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
350 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
351 StreamInfo *stream = rm->audio_stream;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
352 int i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
353
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
354 /* XXX: suppress this malloc */
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 33
diff changeset
355 buf1= (uint8_t*) av_malloc( size * sizeof(uint8_t) );
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
356
470
334e08488ad1 correctly interleave packets during encoding
michael
parents: 468
diff changeset
357 write_packet_header(s, stream, size, !!(flags & PKT_FLAG_KEY));
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
358
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
359 /* for AC3, the words seems to be reversed */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
360 for(i=0;i<size;i+=2) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
361 buf1[i] = buf[i+1];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
362 buf1[i+1] = buf[i];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
363 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
364 put_buffer(pb, buf1, size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
365 put_flush_packet(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
366 stream->nb_frames++;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
367 av_free(buf1);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
368 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
369 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
370
470
334e08488ad1 correctly interleave packets during encoding
michael
parents: 468
diff changeset
371 static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int flags)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
372 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
373 RMContext *rm = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
374 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
375 StreamInfo *stream = rm->video_stream;
470
334e08488ad1 correctly interleave packets during encoding
michael
parents: 468
diff changeset
376 int key_frame = !!(flags & PKT_FLAG_KEY);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
377
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
378 /* XXX: this is incorrect: should be a parameter */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
379
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
380 /* Well, I spent some time finding the meaning of these bits. I am
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
381 not sure I understood everything, but it works !! */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
382 #if 1
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
383 write_packet_header(s, stream, size + 7, key_frame);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
384 /* bit 7: '1' if final packet of a frame converted in several packets */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
385 put_byte(pb, 0x81);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
386 /* bit 7: '1' if I frame. bits 6..0 : sequence number in current
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
387 frame starting from 1 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
388 if (key_frame) {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
389 put_byte(pb, 0x81);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
390 } else {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
391 put_byte(pb, 0x01);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
392 }
611
8fcecf36e64c rm encoding fix
michael
parents: 610
diff changeset
393 put_be16(pb, 0x4000 + (size)); /* total frame size */
8fcecf36e64c rm encoding fix
michael
parents: 610
diff changeset
394 put_be16(pb, 0x4000 + (size)); /* offset from the start or the end */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
395 #else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
396 /* full frame */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
397 write_packet_header(s, size + 6);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
398 put_byte(pb, 0xc0);
611
8fcecf36e64c rm encoding fix
michael
parents: 610
diff changeset
399 put_be16(pb, 0x4000 + size); /* total frame size */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
400 put_be16(pb, 0x4000 + packet_number * 126); /* position in stream */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
401 #endif
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
402 put_byte(pb, stream->nb_frames & 0xff);
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
403
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
404 put_buffer(pb, buf, size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
405 put_flush_packet(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
406
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
407 stream->nb_frames++;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
408 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
409 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
410
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 370
diff changeset
411 static int rm_write_packet(AVFormatContext *s, AVPacket *pkt)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
412 {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
413 if (s->streams[pkt->stream_index]->codec->codec_type ==
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
414 CODEC_TYPE_AUDIO)
470
334e08488ad1 correctly interleave packets during encoding
michael
parents: 468
diff changeset
415 return rm_write_audio(s, pkt->data, pkt->size, pkt->flags);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
416 else
470
334e08488ad1 correctly interleave packets during encoding
michael
parents: 468
diff changeset
417 return rm_write_video(s, pkt->data, pkt->size, pkt->flags);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
418 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
419
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
420 static int rm_write_trailer(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
421 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
422 RMContext *rm = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
423 int data_size, index_pos, i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
424 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
425
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
426 if (!url_is_streamed(&s->pb)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
427 /* end of file: finish to write header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
428 index_pos = url_fseek(pb, 0, SEEK_CUR);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
429 data_size = index_pos - rm->data_pos;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
430
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
431 /* index */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
432 put_tag(pb, "INDX");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
433 put_be32(pb, 10 + 10 * s->nb_streams);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
434 put_be16(pb, 0);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
435
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
436 for(i=0;i<s->nb_streams;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
437 put_be32(pb, 0); /* zero indices */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
438 put_be16(pb, i); /* stream number */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
439 put_be32(pb, 0); /* next index */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
440 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
441 /* undocumented end header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
442 put_be32(pb, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
443 put_be32(pb, 0);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
444
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
445 url_fseek(pb, 0, SEEK_SET);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
446 for(i=0;i<s->nb_streams;i++)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
447 rm->streams[i].total_frames = rm->streams[i].nb_frames;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
448 rv10_write_header(s, data_size, index_pos);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
449 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
450 /* undocumented end header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
451 put_be32(pb, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
452 put_be32(pb, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
453 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
454 put_flush_packet(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
455 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
456 }
858
66cc656ea404 Replace CONFIG_ENCODERS/CONFIG_DECODERS with CONFIG_MUXERS/CONFIG_DEMUXERS
diego
parents: 820
diff changeset
457 #endif //CONFIG_MUXERS
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
458
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
459 /***************************************************/
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
460
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
461 static void get_str(ByteIOContext *pb, char *buf, int buf_size)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
462 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
463 int len, i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
464 char *q;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
465
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
466 len = get_be16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
467 q = buf;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
468 for(i=0;i<len;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
469 if (i < buf_size - 1)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
470 *q++ = get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
471 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
472 *q = '\0';
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
473 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
474
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
475 static void get_str8(ByteIOContext *pb, char *buf, int buf_size)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
476 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
477 int len, i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
478 char *q;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
479
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
480 len = get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
481 q = buf;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
482 for(i=0;i<len;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
483 if (i < buf_size - 1)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
484 *q++ = get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
485 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
486 *q = '\0';
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
487 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
488
1106
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
489 static int rm_read_audio_stream_info(AVFormatContext *s, AVStream *st,
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
490 int read_all)
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
491 {
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
492 RMContext *rm = s->priv_data;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
493 ByteIOContext *pb = &s->pb;
886
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
494 char buf[256];
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
495 uint32_t version;
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
496 int i;
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
497
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
498 /* ra type header */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
499 version = get_be32(pb); /* version */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
500 if (((version >> 16) & 0xff) == 3) {
886
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
501 int64_t startpos = url_ftell(pb);
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
502 /* very old version */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
503 for(i = 0; i < 14; i++)
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
504 get_byte(pb);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
505 get_str8(pb, s->title, sizeof(s->title));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
506 get_str8(pb, s->author, sizeof(s->author));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
507 get_str8(pb, s->copyright, sizeof(s->copyright));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
508 get_str8(pb, s->comment, sizeof(s->comment));
886
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
509 if ((startpos + (version & 0xffff)) >= url_ftell(pb) + 2) {
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
510 // fourcc (should always be "lpcJ")
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
511 get_byte(pb);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
512 get_str8(pb, buf, sizeof(buf));
886
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
513 }
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
514 // Skip extra header crap (this should never happen)
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
515 if ((startpos + (version & 0xffff)) > url_ftell(pb))
7ed1351f8c7e Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
rtognimp
parents: 885
diff changeset
516 url_fskip(pb, (version & 0xffff) + startpos - url_ftell(pb));
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
517 st->codec->sample_rate = 8000;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
518 st->codec->channels = 1;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
519 st->codec->codec_type = CODEC_TYPE_AUDIO;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
520 st->codec->codec_id = CODEC_ID_RA_144;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
521 } else {
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
522 int flavor, sub_packet_h, coded_framesize, sub_packet_size;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
523 /* old version (4) */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
524 get_be32(pb); /* .ra4 */
687
561f27e36bc4 ra288 demuxing support (doesnt really work, might be demuxer or decoder bug)
michael
parents: 652
diff changeset
525 get_be32(pb); /* data size */
561f27e36bc4 ra288 demuxing support (doesnt really work, might be demuxer or decoder bug)
michael
parents: 652
diff changeset
526 get_be16(pb); /* version2 */
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
527 get_be32(pb); /* header size */
687
561f27e36bc4 ra288 demuxing support (doesnt really work, might be demuxer or decoder bug)
michael
parents: 652
diff changeset
528 flavor= get_be16(pb); /* add codec info / flavor */
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
529 rm->coded_framesize = coded_framesize = get_be32(pb); /* coded frame size */
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
530 get_be32(pb); /* ??? */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
531 get_be32(pb); /* ??? */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
532 get_be32(pb); /* ??? */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
533 rm->sub_packet_h = sub_packet_h = get_be16(pb); /* 1 */
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
534 st->codec->block_align= get_be16(pb); /* frame size */
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
535 rm->sub_packet_size = sub_packet_size = get_be16(pb); /* sub packet size */
687
561f27e36bc4 ra288 demuxing support (doesnt really work, might be demuxer or decoder bug)
michael
parents: 652
diff changeset
536 get_be16(pb); /* ??? */
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
537 if (((version >> 16) & 0xff) == 5) {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
538 get_be16(pb); get_be16(pb); get_be16(pb); }
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
539 st->codec->sample_rate = get_be16(pb);
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
540 get_be32(pb);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
541 st->codec->channels = get_be16(pb);
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
542 if (((version >> 16) & 0xff) == 5) {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
543 get_be32(pb);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
544 buf[0] = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
545 buf[1] = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
546 buf[2] = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
547 buf[3] = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
548 buf[4] = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
549 } else {
1441
ad3b03b7b142 reindentation, patch by From: Steve Lhomme, slhomme divxcorp com
diego
parents: 1415
diff changeset
550 get_str8(pb, buf, sizeof(buf)); /* desc */
ad3b03b7b142 reindentation, patch by From: Steve Lhomme, slhomme divxcorp com
diego
parents: 1415
diff changeset
551 get_str8(pb, buf, sizeof(buf)); /* desc */
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 886
diff changeset
552 }
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
553 st->codec->codec_type = CODEC_TYPE_AUDIO;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
554 if (!strcmp(buf, "dnet")) {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
555 st->codec->codec_id = CODEC_ID_AC3;
687
561f27e36bc4 ra288 demuxing support (doesnt really work, might be demuxer or decoder bug)
michael
parents: 652
diff changeset
556 } else if (!strcmp(buf, "28_8")) {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
557 st->codec->codec_id = CODEC_ID_RA_288;
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
558 st->codec->extradata_size= 0;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
559 rm->audio_framesize = st->codec->block_align;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
560 st->codec->block_align = coded_framesize;
1079
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
561
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
562 if(rm->audio_framesize >= UINT_MAX / sub_packet_h){
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
563 av_log(s, AV_LOG_ERROR, "rm->audio_framesize * sub_packet_h too large\n");
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
564 return -1;
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
565 }
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
566
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
567 rm->audiobuf = av_malloc(rm->audio_framesize * sub_packet_h);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
568 } else if (!strcmp(buf, "cook")) {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
569 int codecdata_length, i;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
570 get_be16(pb); get_byte(pb);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
571 if (((version >> 16) & 0xff) == 5)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
572 get_byte(pb);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
573 codecdata_length = get_be32(pb);
1079
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
574 if(codecdata_length + FF_INPUT_BUFFER_PADDING_SIZE <= (unsigned)codecdata_length){
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
575 av_log(s, AV_LOG_ERROR, "codecdata_length too large\n");
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
576 return -1;
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
577 }
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
578
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
579 st->codec->codec_id = CODEC_ID_COOK;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
580 st->codec->extradata_size= codecdata_length;
884
2ece9c9dd94c malloc padding to avoid reading past the malloc()ed area.
henry
parents: 879
diff changeset
581 st->codec->extradata= av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
582 for(i = 0; i < codecdata_length; i++)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
583 ((uint8_t*)st->codec->extradata)[i] = get_byte(pb);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
584 rm->audio_framesize = st->codec->block_align;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
585 st->codec->block_align = rm->sub_packet_size;
1079
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
586
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
587 if(rm->audio_framesize >= UINT_MAX / sub_packet_h){
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
588 av_log(s, AV_LOG_ERROR, "rm->audio_framesize * sub_packet_h too large\n");
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
589 return -1;
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
590 }
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
591
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
592 rm->audiobuf = av_malloc(rm->audio_framesize * sub_packet_h);
1105
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
593 } else if (!strcmp(buf, "raac") || !strcmp(buf, "racp")) {
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
594 int codecdata_length, i;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
595 get_be16(pb); get_byte(pb);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
596 if (((version >> 16) & 0xff) == 5)
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
597 get_byte(pb);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
598 st->codec->codec_id = CODEC_ID_AAC;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
599 codecdata_length = get_be32(pb);
1106
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
600 if(codecdata_length + FF_INPUT_BUFFER_PADDING_SIZE <= (unsigned)codecdata_length){
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
601 av_log(s, AV_LOG_ERROR, "codecdata_length too large\n");
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
602 return -1;
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
603 }
1105
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
604 if (codecdata_length >= 1) {
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
605 st->codec->extradata_size = codecdata_length - 1;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
606 st->codec->extradata = av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
607 get_byte(pb);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
608 for(i = 0; i < st->codec->extradata_size; i++)
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
609 ((uint8_t*)st->codec->extradata)[i] = get_byte(pb);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
610 }
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
611 } else {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
612 st->codec->codec_id = CODEC_ID_NONE;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
613 pstrcpy(st->codec->codec_name, sizeof(st->codec->codec_name),
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
614 buf);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
615 }
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
616 if (read_all) {
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
617 get_byte(pb);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
618 get_byte(pb);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
619 get_byte(pb);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
620
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
621 get_str8(pb, s->title, sizeof(s->title));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
622 get_str8(pb, s->author, sizeof(s->author));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
623 get_str8(pb, s->copyright, sizeof(s->copyright));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
624 get_str8(pb, s->comment, sizeof(s->comment));
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
625 }
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
626 }
1106
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
627 return 0;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
628 }
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
629
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
630 static int rm_read_header_old(AVFormatContext *s, AVFormatParameters *ap)
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
631 {
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
632 RMContext *rm = s->priv_data;
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
633 AVStream *st;
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
634
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
635 rm->old_format = 1;
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
636 st = av_new_stream(s, 0);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
637 if (!st)
1106
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
638 return -1;
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
639 return rm_read_audio_stream_info(s, st, 1);
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
640 }
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
641
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
642 static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
643 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
644 RMContext *rm = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
645 AVStream *st;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
646 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
647 unsigned int tag, v;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
648 int tag_size, size, codec_data_size, i;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 33
diff changeset
649 int64_t codec_pos;
1350
f77cf5a063a8 Remove unused variables and the corresponding warnings along with them.
diego
parents: 1344
diff changeset
650 unsigned int start_time, duration;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
651 char buf[128];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
652 int flags = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
653
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
654 tag = get_le32(pb);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
655 if (tag == MKTAG('.', 'r', 'a', 0xfd)) {
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
656 /* very old .ra format */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
657 return rm_read_header_old(s, ap);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
658 } else if (tag != MKTAG('.', 'R', 'M', 'F')) {
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 470
diff changeset
659 return AVERROR_IO;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
660 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
661
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
662 get_be32(pb); /* header size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
663 get_be16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
664 get_be32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
665 get_be32(pb); /* number of headers */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
666
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
667 for(;;) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
668 if (url_feof(pb))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
669 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
670 tag = get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
671 tag_size = get_be32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
672 get_be16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
673 #if 0
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
674 printf("tag=%c%c%c%c (%08x) size=%d\n",
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
675 (tag) & 0xff,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
676 (tag >> 8) & 0xff,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
677 (tag >> 16) & 0xff,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
678 (tag >> 24) & 0xff,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
679 tag,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
680 tag_size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
681 #endif
736
82c34355e466 fixing broken_rv20_1mb_.rm
michael
parents: 708
diff changeset
682 if (tag_size < 10 && tag != MKTAG('D', 'A', 'T', 'A'))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
683 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
684 switch(tag) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
685 case MKTAG('P', 'R', 'O', 'P'):
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
686 /* file header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
687 get_be32(pb); /* max bit rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
688 get_be32(pb); /* avg bit rate */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
689 get_be32(pb); /* max packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
690 get_be32(pb); /* avg packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
691 get_be32(pb); /* nb packets */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
692 get_be32(pb); /* duration */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
693 get_be32(pb); /* preroll */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
694 get_be32(pb); /* index offset */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
695 get_be32(pb); /* data offset */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
696 get_be16(pb); /* nb streams */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
697 flags = get_be16(pb); /* flags */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
698 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
699 case MKTAG('C', 'O', 'N', 'T'):
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
700 get_str(pb, s->title, sizeof(s->title));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
701 get_str(pb, s->author, sizeof(s->author));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
702 get_str(pb, s->copyright, sizeof(s->copyright));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
703 get_str(pb, s->comment, sizeof(s->comment));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
704 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
705 case MKTAG('M', 'D', 'P', 'R'):
188
6c9d6422a2f6 update duration and start_time - add av_new_stream() usage
bellard
parents: 85
diff changeset
706 st = av_new_stream(s, 0);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
707 if (!st)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
708 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
709 st->id = get_be16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
710 get_be32(pb); /* max bit rate */
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
711 st->codec->bit_rate = get_be32(pb); /* bit rate */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
712 get_be32(pb); /* max packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
713 get_be32(pb); /* avg packet size */
188
6c9d6422a2f6 update duration and start_time - add av_new_stream() usage
bellard
parents: 85
diff changeset
714 start_time = get_be32(pb); /* start time */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
715 get_be32(pb); /* preroll */
188
6c9d6422a2f6 update duration and start_time - add av_new_stream() usage
bellard
parents: 85
diff changeset
716 duration = get_be32(pb); /* duration */
743
af4e24d6310c switch to native time bases
michael
parents: 736
diff changeset
717 st->start_time = start_time;
af4e24d6310c switch to native time bases
michael
parents: 736
diff changeset
718 st->duration = duration;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
719 get_str8(pb, buf, sizeof(buf)); /* desc */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
720 get_str8(pb, buf, sizeof(buf)); /* mimetype */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
721 codec_data_size = get_be32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
722 codec_pos = url_ftell(pb);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
723 st->codec->codec_type = CODEC_TYPE_DATA;
607
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
724 av_set_pts_info(st, 64, 1, 1000);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
725
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
726 v = get_be32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
727 if (v == MKTAG(0xfd, 'a', 'r', '.')) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
728 /* ra type header */
1106
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
729 if (rm_read_audio_stream_info(s, st, 0))
8f78a071554d rm_read_audio_stream_info return type is not void
rtogni
parents: 1105
diff changeset
730 return -1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
731 } else {
604
ed2709c1f49c next try at fixing rv20 decoding
michael
parents: 593
diff changeset
732 int fps, fps2;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
733 if (get_le32(pb) != MKTAG('V', 'I', 'D', 'O')) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
734 fail1:
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
735 av_log(st->codec, AV_LOG_ERROR, "Unsupported video codec\n");
593
a1f354e84965 skip unknown streams instead of failing
michael
parents: 592
diff changeset
736 goto skip;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
737 }
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
738 st->codec->codec_tag = get_le32(pb);
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
739 // av_log(NULL, AV_LOG_DEBUG, "%X %X\n", st->codec->codec_tag, MKTAG('R', 'V', '2', '0'));
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
740 if ( st->codec->codec_tag != MKTAG('R', 'V', '1', '0')
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
741 && st->codec->codec_tag != MKTAG('R', 'V', '2', '0')
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
742 && st->codec->codec_tag != MKTAG('R', 'V', '3', '0')
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
743 && st->codec->codec_tag != MKTAG('R', 'V', '4', '0'))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
744 goto fail1;
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
745 st->codec->width = get_be16(pb);
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
746 st->codec->height = get_be16(pb);
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
747 st->codec->time_base.num= 1;
604
ed2709c1f49c next try at fixing rv20 decoding
michael
parents: 593
diff changeset
748 fps= get_be16(pb);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
749 st->codec->codec_type = CODEC_TYPE_VIDEO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
750 get_be32(pb);
604
ed2709c1f49c next try at fixing rv20 decoding
michael
parents: 593
diff changeset
751 fps2= get_be16(pb);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
752 get_be16(pb);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
753
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
754 st->codec->extradata_size= codec_data_size - (url_ftell(pb) - codec_pos);
1079
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
755
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
756 if(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE <= (unsigned)st->codec->extradata_size){
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
757 //check is redundant as get_buffer() will catch this
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
758 av_log(s, AV_LOG_ERROR, "st->codec->extradata_size too large\n");
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
759 return -1;
40e81416015d sanity checks some might have been exploitable
michael
parents: 979
diff changeset
760 }
884
2ece9c9dd94c malloc padding to avoid reading past the malloc()ed area.
henry
parents: 879
diff changeset
761 st->codec->extradata= av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
762 get_buffer(pb, st->codec->extradata, st->codec->extradata_size);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
763
604
ed2709c1f49c next try at fixing rv20 decoding
michael
parents: 593
diff changeset
764 // av_log(NULL, AV_LOG_DEBUG, "fps= %d fps2= %d\n", fps, fps2);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
765 st->codec->time_base.den = fps * st->codec->time_base.num;
1344
770363b669aa dont set sub_id as its completly redundant and silly
michael
parents: 1169
diff changeset
766 switch(((uint8_t*)st->codec->extradata)[4]>>4){
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
767 case 1: st->codec->codec_id = CODEC_ID_RV10; break;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
768 case 2: st->codec->codec_id = CODEC_ID_RV20; break;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
769 case 3: st->codec->codec_id = CODEC_ID_RV30; break;
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
770 case 4: st->codec->codec_id = CODEC_ID_RV40; break;
638
5188094c6ec4 RV30/RV40 demuxing (untested)
michael
parents: 632
diff changeset
771 default: goto fail1;
5188094c6ec4 RV30/RV40 demuxing (untested)
michael
parents: 632
diff changeset
772 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
773 }
593
a1f354e84965 skip unknown streams instead of failing
michael
parents: 592
diff changeset
774 skip:
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
775 /* skip codec info */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
776 size = url_ftell(pb) - codec_pos;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
777 url_fskip(pb, codec_data_size - size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
778 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
779 case MKTAG('D', 'A', 'T', 'A'):
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
780 goto header_end;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
781 default:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
782 /* unknown tag: skip it */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
783 url_fskip(pb, tag_size - 10);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
784 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
785 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
786 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
787 header_end:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
788 rm->nb_packets = get_be32(pb); /* number of packets */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
789 if (!rm->nb_packets && (flags & 4))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
790 rm->nb_packets = 3600 * 25;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
791 get_be32(pb); /* next data header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
792 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
793
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
794 fail:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
795 for(i=0;i<s->nb_streams;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
796 av_free(s->streams[i]);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
797 }
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 470
diff changeset
798 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
799 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
800
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
801 static int get_num(ByteIOContext *pb, int *len)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
802 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
803 int n, n1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
804
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
805 n = get_be16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
806 (*len)-=2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
807 if (n >= 0x4000) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
808 return n - 0x4000;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
809 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
810 n1 = get_be16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
811 (*len)-=2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
812 return (n << 16) | n1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
813 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
814 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
815
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
816 /* multiple of 20 bytes for ra144 (ugly) */
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
817 #define RAW_PACKET_SIZE 1000
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
818
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
819 static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos){
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
820 RMContext *rm = s->priv_data;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
821 ByteIOContext *pb = &s->pb;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
822 int len, num, res, i;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
823 AVStream *st;
632
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
824 uint32_t state=0xFFFFFFFF;
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
825
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
826 while(!url_feof(pb)){
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
827 *pos= url_ftell(pb);
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
828 if(rm->remaining_len > 0){
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
829 num= rm->current_stream;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
830 len= rm->remaining_len;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
831 *timestamp = AV_NOPTS_VALUE;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
832 *flags= 0;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
833 }else{
632
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
834 state= (state<<8) + get_byte(pb);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
835
632
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
836 if(state == MKBETAG('I', 'N', 'D', 'X')){
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
837 len = get_be16(pb) - 6;
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
838 if(len<0)
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
839 continue;
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
840 goto skip;
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
841 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
842
632
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
843 if(state > (unsigned)0xFFFF || state < 12)
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
844 continue;
632
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
845 len=state;
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
846 state= 0xFFFFFFFF;
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
847
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
848 num = get_be16(pb);
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
849 *timestamp = get_be32(pb);
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
850 res= get_byte(pb); /* reserved */
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
851 *flags = get_byte(pb); /* flags */
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
852
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
853
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
854 len -= 12;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
855 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
856 for(i=0;i<s->nb_streams;i++) {
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
857 st = s->streams[i];
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
858 if (num == st->id)
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
859 break;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
860 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
861 if (i == s->nb_streams) {
632
9f8fa2f4edfd skip INDX chunks
michael
parents: 614
diff changeset
862 skip:
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
863 /* skip packet if unknown number */
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
864 url_fskip(pb, len);
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
865 rm->remaining_len -= len;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
866 continue;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
867 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
868 *stream_index= i;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
869
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
870 return len;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
871 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
872 return -1;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
873 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
874
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
875 static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
876 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
877 RMContext *rm = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
878 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
879 AVStream *st;
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
880 int i, len, tmp, j;
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
881 int64_t timestamp, pos;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 33
diff changeset
882 uint8_t *ptr;
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
883 int flags;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
884
888
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
885 if (rm->audio_pkt_cnt) {
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
886 // If there are queued audio packet return them first
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
887 st = s->streams[rm->audio_stream_num];
1105
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
888 if (st->codec->codec_id == CODEC_ID_AAC)
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
889 av_get_packet(pb, pkt, rm->sub_packet_lengths[rm->sub_packet_cnt - rm->audio_pkt_cnt]);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
890 else {
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
891 av_new_packet(pkt, st->codec->block_align);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
892 memcpy(pkt->data, rm->audiobuf + st->codec->block_align *
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
893 (rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - rm->audio_pkt_cnt),
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
894 st->codec->block_align);
1105
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
895 }
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
896 rm->audio_pkt_cnt--;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
897 pkt->flags = 0;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
898 pkt->stream_index = rm->audio_stream_num;
888
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
899 } else if (rm->old_format) {
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
900 st = s->streams[0];
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
901 if (st->codec->codec_id == CODEC_ID_RA_288) {
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
902 int x, y;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
903
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
904 for (y = 0; y < rm->sub_packet_h; y++)
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
905 for (x = 0; x < rm->sub_packet_h/2; x++)
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
906 if (get_buffer(pb, rm->audiobuf+x*2*rm->audio_framesize+y*rm->coded_framesize, rm->coded_framesize) <= 0)
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
907 return AVERROR_IO;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
908 rm->audio_stream_num = 0;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
909 rm->audio_pkt_cnt = rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - 1;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
910 // Release first audio packet
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
911 av_new_packet(pkt, st->codec->block_align);
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
912 memcpy(pkt->data, rm->audiobuf, st->codec->block_align);
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
913 pkt->flags |= PKT_FLAG_KEY; // Mark first packet as keyframe
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
914 pkt->stream_index = 0;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
915 } else {
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
916 /* just read raw bytes */
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
917 len = RAW_PACKET_SIZE;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
918 len= av_get_packet(pb, pkt, len);
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
919 pkt->stream_index = 0;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
920 if (len <= 0) {
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
921 return AVERROR_IO;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
922 }
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
923 pkt->size = len;
78b99ab16ea2 Support for 28_8 in old ar. files
rtognimp
parents: 887
diff changeset
924 }
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
925 } else {
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
926 int seq=1;
652
b47948262721 support discarding uninterresting packets
michael
parents: 638
diff changeset
927 resync:
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
928 len=sync(s, &timestamp, &flags, &i, &pos);
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
929 if(len<0)
610
1ab7b989f475 try to recover from errors instead of failing fataly
michael
parents: 609
diff changeset
930 return AVERROR_IO;
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
931 st = s->streams[i];
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
932
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
933 if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
609
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
934 int h, pic_num, len2, pos;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
935
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
936 h= get_byte(pb); len--;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
937 if(!(h & 0x40)){
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
938 seq = get_byte(pb); len--;
609
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
939 }
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
940
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
941 if((h & 0xc0) == 0x40){
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
942 len2= pos= 0;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
943 }else{
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
944 len2 = get_num(pb, &len);
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
945 pos = get_num(pb, &len);
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
946 }
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
947 /* picture number */
609
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
948 pic_num= get_byte(pb); len--;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
949 rm->remaining_len= len;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
950 rm->current_stream= st->id;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
951
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
952 // av_log(NULL, AV_LOG_DEBUG, "%X len:%d pos:%d len2:%d pic_num:%d\n",h, len, pos, len2, pic_num);
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
953 if(len2 && len2<len)
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
954 len=len2;
2f0de265bc5e various demuxer fixes
michael
parents: 608
diff changeset
955 rm->remaining_len-= len;
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
956 av_get_packet(pb, pkt, len);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
957 }
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
958
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
959 if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
960 if ((st->codec->codec_id == CODEC_ID_RA_288) ||
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
961 (st->codec->codec_id == CODEC_ID_COOK)) {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
962 int x;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
963 int sps = rm->sub_packet_size;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
964 int cfs = rm->coded_framesize;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
965 int h = rm->sub_packet_h;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
966 int y = rm->sub_packet_cnt;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
967 int w = rm->audio_framesize;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
968
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
969 if (flags & 2)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
970 y = rm->sub_packet_cnt = 0;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
971 if (!y)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
972 rm->audiotimestamp = timestamp;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
973
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
974 switch(st->codec->codec_id) {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
975 case CODEC_ID_RA_288:
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
976 for (x = 0; x < h/2; x++)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
977 get_buffer(pb, rm->audiobuf+x*2*w+y*cfs, cfs);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
978 break;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
979 case CODEC_ID_COOK:
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
980 for (x = 0; x < w/sps; x++)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
981 get_buffer(pb, rm->audiobuf+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
982 break;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
983 }
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
984
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
985 if (++(rm->sub_packet_cnt) < h)
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
986 goto resync;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
987 else {
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
988 rm->sub_packet_cnt = 0;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
989 rm->audio_stream_num = i;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
990 rm->audio_pkt_cnt = h * w / st->codec->block_align - 1;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
991 // Release first audio packet
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
992 av_new_packet(pkt, st->codec->block_align);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
993 memcpy(pkt->data, rm->audiobuf, st->codec->block_align);
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
994 timestamp = rm->audiotimestamp;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
995 flags = 2; // Mark first packet as keyframe
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
996 }
1105
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
997 } else if (st->codec->codec_id == CODEC_ID_AAC) {
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
998 int x;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
999 rm->audio_stream_num = i;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1000 rm->sub_packet_cnt = (get_be16(pb) & 0xf0) >> 4;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1001 if (rm->sub_packet_cnt) {
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1002 for (x = 0; x < rm->sub_packet_cnt; x++)
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1003 rm->sub_packet_lengths[x] = get_be16(pb);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1004 // Release first audio packet
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1005 rm->audio_pkt_cnt = rm->sub_packet_cnt - 1;
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1006 av_get_packet(pb, pkt, rm->sub_packet_lengths[0]);
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1007 flags = 2; // Mark first packet as keyframe
d187ac890c0e Support for AAC (fourcc raac and racp) in rm files
rtogni
parents: 1079
diff changeset
1008 }
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
1009 } else
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
1010 av_get_packet(pb, pkt, len);
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1011 }
652
b47948262721 support discarding uninterresting packets
michael
parents: 638
diff changeset
1012
708
d79164865a7c more fine grained discarding of packets
michael
parents: 688
diff changeset
1013 if( (st->discard >= AVDISCARD_NONKEY && !(flags&2))
d79164865a7c more fine grained discarding of packets
michael
parents: 688
diff changeset
1014 || st->discard >= AVDISCARD_ALL){
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
1015 av_free_packet(pkt);
652
b47948262721 support discarding uninterresting packets
michael
parents: 638
diff changeset
1016 goto resync;
b47948262721 support discarding uninterresting packets
michael
parents: 638
diff changeset
1017 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
1018
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1019 pkt->stream_index = i;
607
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1020
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1021 #if 0
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
1022 if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
1023 if(st->codec->codec_id == CODEC_ID_RV20){
607
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1024 int seq= 128*(pkt->data[2]&0x7F) + (pkt->data[3]>>1);
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1441
diff changeset
1025 av_log(NULL, AV_LOG_DEBUG, "%d %"PRId64" %d\n", timestamp, timestamp*512LL/25, seq);
607
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1026
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1027 seq |= (timestamp&~0x3FFF);
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1028 if(seq - timestamp > 0x2000) seq -= 0x4000;
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1029 if(seq - timestamp < -0x2000) seq += 0x4000;
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1030 }
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1031 }
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1032 #endif
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1033 pkt->pts= timestamp;
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1034 if(flags&2){
607
fce9fc3a0f17 timestamp fix
michael
parents: 604
diff changeset
1035 pkt->flags |= PKT_FLAG_KEY;
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1036 if((seq&0x7F) == 1)
979
d2e5dfdf4def add size to AVIndex
michael
parents: 896
diff changeset
1037 av_add_index_entry(st, pos, timestamp, 0, 0, AVINDEX_KEYFRAME);
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1038 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1039 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1040
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1041 /* for AC3, needs to swap bytes */
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
1042 if (st->codec->codec_id == CODEC_ID_AC3) {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1043 ptr = pkt->data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1044 for(j=0;j<len;j+=2) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1045 tmp = ptr[0];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1046 ptr[0] = ptr[1];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1047 ptr[1] = tmp;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1048 ptr += 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1049 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1050 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1051 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1052 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1053
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1054 static int rm_read_close(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1055 {
879
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
1056 RMContext *rm = s->priv_data;
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
1057
1f093ae472d8 Cook compatibe decoder, patch by Benjamin Larsson
rtognimp
parents: 858
diff changeset
1058 av_free(rm->audiobuf);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1059 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1060 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1061
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1062 static int rm_probe(AVProbeData *p)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1063 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1064 /* check file header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1065 if (p->buf_size <= 32)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1066 return 0;
194
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1067 if ((p->buf[0] == '.' && p->buf[1] == 'R' &&
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1068 p->buf[2] == 'M' && p->buf[3] == 'F' &&
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1069 p->buf[4] == 0 && p->buf[5] == 0) ||
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1070 (p->buf[0] == '.' && p->buf[1] == 'r' &&
37e7cd3d544d support for older real audio files (<= version 3)
bellard
parents: 188
diff changeset
1071 p->buf[2] == 'a' && p->buf[3] == 0xfd))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1072 return AVPROBE_SCORE_MAX;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1073 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1074 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1075 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1076
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
1077 static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1078 int64_t *ppos, int64_t pos_limit)
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1079 {
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1080 RMContext *rm = s->priv_data;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1081 int64_t pos, dts;
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1082 int stream_index2, flags, len, h;
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1083
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1084 pos = *ppos;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
1085
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1086 if(rm->old_format)
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1087 return AV_NOPTS_VALUE;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1088
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1089 url_fseek(&s->pb, pos, SEEK_SET);
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1090 rm->remaining_len=0;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1091 for(;;){
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1092 int seq=1;
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1093 AVStream *st;
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1094
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1095 len=sync(s, &dts, &flags, &stream_index2, &pos);
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1096 if(len<0)
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1097 return AV_NOPTS_VALUE;
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1098
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1099 st = s->streams[stream_index2];
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 775
diff changeset
1100 if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1101 h= get_byte(&s->pb); len--;
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1102 if(!(h & 0x40)){
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1103 seq = get_byte(&s->pb); len--;
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1104 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1105 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 884
diff changeset
1106
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1107 if((flags&2) && (seq&0x7F) == 1){
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1441
diff changeset
1108 // av_log(s, AV_LOG_DEBUG, "%d %d-%d %"PRId64" %d\n", flags, stream_index2, stream_index, dts, seq);
979
d2e5dfdf4def add size to AVIndex
michael
parents: 896
diff changeset
1109 av_add_index_entry(st, pos, dts, 0, 0, AVINDEX_KEYFRAME);
613
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1110 if(stream_index2 == stream_index)
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1111 break;
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1112 }
2e70d3938f50 seeking in rm 2nd try
michael
parents: 612
diff changeset
1113
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1114 url_fskip(&s->pb, len);
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1115 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1116 *ppos = pos;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1117 return dts;
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1118 }
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1119
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
1120 #ifdef CONFIG_RM_DEMUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
1121 AVInputFormat rm_demuxer = {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1122 "rm",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1123 "rm format",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1124 sizeof(RMContext),
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1125 rm_probe,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1126 rm_read_header,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1127 rm_read_packet,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1128 rm_read_close,
612
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1129 NULL,
fc167cb3b54c seeking in rm
michael
parents: 611
diff changeset
1130 rm_read_dts,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1131 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
1132 #endif
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
1133 #ifdef CONFIG_RM_MUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
1134 AVOutputFormat rm_muxer = {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1135 "rm",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1136 "rm format",
14
b167760cd0aa mimetype fixes patch by (Ryutaroh Matsumoto <ryutaroh at it dot ss dot titech dot ac dot jp>)
michaelni
parents: 7
diff changeset
1137 "application/vnd.rn-realmedia",
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1138 "rm,ra",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1139 sizeof(RMContext),
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1140 CODEC_ID_AC3,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1141 CODEC_ID_RV10,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1142 rm_write_header,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1143 rm_write_packet,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1144 rm_write_trailer,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1145 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
1146 #endif