annotate asf.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 e071dbfd4769
children 39cafa2f6060
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: 1388
diff changeset
2 * ASF compatible 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: 1333
diff changeset
5 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1333
diff changeset
6 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1333
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: 1333
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: 1333
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: 1333
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: 887
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"
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents: 1169
diff changeset
22 #include "riff.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
23 #include "mpegaudio.h"
372
2e12cd1b68ed split asf patch by (Konstantin Andreyev <kandreyev at bcsii dot com>)
michael
parents: 370
diff changeset
24 #include "asf.h"
1503
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
25 #include "common.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
26
348
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
27 #undef NDEBUG
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
28 #include <assert.h>
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
29
373
e47d9c8e2054 asf patch by (Konstantin Andreyev <kandreyev at bcsii dot com>)
michael
parents: 372
diff changeset
30 #define FRAME_HEADER_SIZE 17
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
31 // Fix Me! FRAME_HEADER_SIZE may be different.
373
e47d9c8e2054 asf patch by (Konstantin Andreyev <kandreyev at bcsii dot com>)
michael
parents: 372
diff changeset
32
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
33 static const GUID index_guid = {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
34 0x33000890, 0xe5b1, 0x11cf, { 0x89, 0xf4, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0xcb },
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
35 };
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
36
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
37 /**********************************/
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
38 /* decoding */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
39
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
40 //#define DEBUG
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
41
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
42 #ifdef DEBUG
69
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
43 #define PRINT_IF_GUID(g,cmp) \
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
44 if (!memcmp(g, &cmp, sizeof(GUID))) \
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
45 printf("(GUID: %s) ", #cmp)
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
46
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
47 static void print_guid(const GUID *g)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
48 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
49 int i;
69
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
50 PRINT_IF_GUID(g, asf_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
51 else PRINT_IF_GUID(g, file_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
52 else PRINT_IF_GUID(g, stream_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
53 else PRINT_IF_GUID(g, audio_stream);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
54 else PRINT_IF_GUID(g, audio_conceal_none);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
55 else PRINT_IF_GUID(g, video_stream);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
56 else PRINT_IF_GUID(g, video_conceal_none);
831
8e1b338096a0 changes to ignore command media embedded in MS WMV files patch by ("Brown, Mike": mikeb, vibephone com)
michael
parents: 828
diff changeset
57 else PRINT_IF_GUID(g, command_stream);
69
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
58 else PRINT_IF_GUID(g, comment_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
59 else PRINT_IF_GUID(g, codec_comment_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
60 else PRINT_IF_GUID(g, codec_comment1_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
61 else PRINT_IF_GUID(g, data_header);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
62 else PRINT_IF_GUID(g, index_guid);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
63 else PRINT_IF_GUID(g, head1_guid);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
64 else PRINT_IF_GUID(g, head2_guid);
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
65 else PRINT_IF_GUID(g, my_guid);
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
66 else PRINT_IF_GUID(g, ext_stream_header);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
67 else PRINT_IF_GUID(g, extended_content_header);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
68 else PRINT_IF_GUID(g, ext_stream_embed_stream_header);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
69 else PRINT_IF_GUID(g, ext_stream_audio_stream);
69
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
70 else
0686eeb0c21b prettier debug output
mmu_man
parents: 65
diff changeset
71 printf("(GUID: unknown) ");
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
72 printf("0x%08x, 0x%04x, 0x%04x, {", g->v1, g->v2, g->v3);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
73 for(i=0;i<8;i++)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
74 printf(" 0x%02x,", g->v4[i]);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
75 printf("}\n");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
76 }
949
0566e2d915ef 10l, fails to compile when debug enabled
alex
parents: 904
diff changeset
77 #undef PRINT_IF_GUID
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
78 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
79
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
80 static void get_guid(ByteIOContext *s, GUID *g)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
81 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
82 int i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
83
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
84 g->v1 = get_le32(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
85 g->v2 = get_le16(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
86 g->v3 = get_le16(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
87 for(i=0;i<8;i++)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
88 g->v4[i] = get_byte(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
89 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
90
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
91 #if 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
92 static void get_str16(ByteIOContext *pb, char *buf, int buf_size)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
93 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
94 int len, c;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
95 char *q;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
96
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
97 len = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
98 q = buf;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
99 while (len > 0) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
100 c = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
101 if ((q - buf) < buf_size - 1)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
102 *q++ = c;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
103 len--;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
104 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
105 *q = '\0';
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
106 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
107 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
108
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
109 static void get_str16_nolen(ByteIOContext *pb, int len, char *buf, int buf_size)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
110 {
1503
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
111 char* q = buf;
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
112 len /= 2;
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
113 while (len--) {
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
114 uint8_t tmp;
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
115 PUT_UTF8(get_le16(pb), tmp, if (q - buf < buf_size - 1) *q++ = tmp;)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
116 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
117 *q = '\0';
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
118 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
119
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
120 static int asf_probe(AVProbeData *pd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
121 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
122 GUID g;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
123 const unsigned char *p;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
124 int i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
125
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
126 /* check file header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
127 if (pd->buf_size <= 32)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
128 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
129 p = pd->buf;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
130 g.v1 = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
131 p += 4;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
132 g.v2 = p[0] | (p[1] << 8);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
133 p += 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
134 g.v3 = p[0] | (p[1] << 8);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
135 p += 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
136 for(i=0;i<8;i++)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
137 g.v4[i] = *p++;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
138
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
139 if (!memcmp(&g, &asf_header, sizeof(GUID)))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
140 return AVPROBE_SCORE_MAX;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
141 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
142 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
143 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
144
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
145 static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
146 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
147 ASFContext *asf = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
148 GUID g;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
149 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
150 AVStream *st;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
151 ASFStream *asf_st;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
152 int size, i;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 14
diff changeset
153 int64_t gsize;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
154
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
155 get_guid(pb, &g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
156 if (memcmp(&g, &asf_header, sizeof(GUID)))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
157 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
158 get_le64(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
159 get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
160 get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
161 get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
162 memset(&asf->asfid2avid, -1, sizeof(asf->asfid2avid));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
163 for(;;) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
164 get_guid(pb, &g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
165 gsize = get_le64(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
166 #ifdef DEBUG
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1415
diff changeset
167 printf("%08"PRIx64": ", url_ftell(pb) - 24);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
168 print_guid(&g);
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1415
diff changeset
169 printf(" size=0x%"PRIx64"\n", gsize);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
170 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
171 if (gsize < 24)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
172 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
173 if (!memcmp(&g, &file_header, sizeof(GUID))) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
174 get_guid(pb, &asf->hdr.guid);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
175 asf->hdr.file_size = get_le64(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
176 asf->hdr.create_time = get_le64(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
177 asf->hdr.packets_count = get_le64(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
178 asf->hdr.send_time = get_le64(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
179 asf->hdr.play_time = get_le64(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
180 asf->hdr.preroll = get_le32(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
181 asf->hdr.ignore = get_le32(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
182 asf->hdr.flags = get_le32(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
183 asf->hdr.min_pktsize = get_le32(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
184 asf->hdr.max_pktsize = get_le32(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
185 asf->hdr.max_bitrate = get_le32(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
186 asf->packet_size = asf->hdr.max_pktsize;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
187 asf->nb_packets = asf->hdr.packets_count;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
188 } else if (!memcmp(&g, &stream_header, sizeof(GUID))) {
1263
cf88f6719743 total_size should be 64bit (1 hunk of the asf seeking patch from DrDivx / Steve Lhomme)
michael
parents: 1206
diff changeset
189 int type, type_specific_size, sizeX;
cf88f6719743 total_size should be 64bit (1 hunk of the asf seeking patch from DrDivx / Steve Lhomme)
michael
parents: 1206
diff changeset
190 uint64_t total_size;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
191 unsigned int tag1;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 14
diff changeset
192 int64_t pos1, pos2;
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
193 int test_for_ext_stream_audio;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
194
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
195 pos1 = url_ftell(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
196
188
6c9d6422a2f6 update duration and start_time - add av_new_stream() usage
bellard
parents: 136
diff changeset
197 st = av_new_stream(s, 0);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
198 if (!st)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
199 goto fail;
462
b69898ffc92a move time_base (pts_num/pts_den) from AVFormatContext -> AVStream
michael
parents: 437
diff changeset
200 av_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
201 asf_st = av_mallocz(sizeof(ASFStream));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
202 if (!asf_st)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
203 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
204 st->priv_data = asf_st;
743
af4e24d6310c switch to native time bases
michael
parents: 735
diff changeset
205 st->start_time = asf->hdr.preroll;
1552
de18846fa25c Minor modifications to handle mms streaming.
takis
parents: 1503
diff changeset
206 if(!(asf->hdr.flags & 0x01)) { // if we aren't streaming...
de18846fa25c Minor modifications to handle mms streaming.
takis
parents: 1503
diff changeset
207 st->duration = asf->hdr.send_time /
de18846fa25c Minor modifications to handle mms streaming.
takis
parents: 1503
diff changeset
208 (10000000 / 1000) - st->start_time;
de18846fa25c Minor modifications to handle mms streaming.
takis
parents: 1503
diff changeset
209 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
210 get_guid(pb, &g);
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
211
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
212 test_for_ext_stream_audio = 0;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
213 if (!memcmp(&g, &audio_stream, sizeof(GUID))) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
214 type = CODEC_TYPE_AUDIO;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
215 } else if (!memcmp(&g, &video_stream, sizeof(GUID))) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
216 type = CODEC_TYPE_VIDEO;
831
8e1b338096a0 changes to ignore command media embedded in MS WMV files patch by ("Brown, Mike": mikeb, vibephone com)
michael
parents: 828
diff changeset
217 } else if (!memcmp(&g, &command_stream, sizeof(GUID))) {
8e1b338096a0 changes to ignore command media embedded in MS WMV files patch by ("Brown, Mike": mikeb, vibephone com)
michael
parents: 828
diff changeset
218 type = CODEC_TYPE_UNKNOWN;
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
219 } else if (!memcmp(&g, &ext_stream_embed_stream_header, sizeof(GUID))) {
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
220 test_for_ext_stream_audio = 1;
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
221 type = CODEC_TYPE_UNKNOWN;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
222 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
223 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
224 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
225 get_guid(pb, &g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
226 total_size = get_le64(pb);
84
0068a6902911 correct AUDIO strf parsing patch by (Roman Shaposhnick <rvs at sun dot com>)
michaelni
parents: 74
diff changeset
227 type_specific_size = get_le32(pb);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
228 get_le32(pb);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
229 st->id = get_le16(pb) & 0x7f; /* stream id */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
230 // mapping of asf ID to AV stream ID;
188
6c9d6422a2f6 update duration and start_time - add av_new_stream() usage
bellard
parents: 136
diff changeset
231 asf->asfid2avid[st->id] = s->nb_streams - 1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
232
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
233 get_le32(pb);
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
234
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
235 if (test_for_ext_stream_audio) {
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
236 get_guid(pb, &g);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
237 if (!memcmp(&g, &ext_stream_audio_stream, sizeof(GUID))) {
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
238 type = CODEC_TYPE_AUDIO;
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
239 get_guid(pb, &g);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
240 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
241 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
242 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
243 get_guid(pb, &g);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
244 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
245 }
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
246 }
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
247
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
248 st->codec->codec_type = type;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
249 if (type == CODEC_TYPE_AUDIO) {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
250 get_wav_header(pb, st->codec, type_specific_size);
312
8a04d2e1be2f frame rate should be completely disabled in asf (closer now) - disabled seek
bellard
parents: 300
diff changeset
251 st->need_parsing = 1;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
252 /* We have to init the frame size at some point .... */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
253 pos2 = url_ftell(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
254 if (gsize > (pos2 + 8 - pos1 + 24)) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
255 asf_st->ds_span = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
256 asf_st->ds_packet_size = get_le16(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
257 asf_st->ds_chunk_size = get_le16(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
258 asf_st->ds_data_size = get_le16(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
259 asf_st->ds_silence_data = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
260 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
261 //printf("Descrambling: ps:%d cs:%d ds:%d s:%d sd:%d\n",
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
262 // asf_st->ds_packet_size, asf_st->ds_chunk_size,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
263 // asf_st->ds_data_size, asf_st->ds_span, asf_st->ds_silence_data);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
264 if (asf_st->ds_span > 1) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
265 if (!asf_st->ds_chunk_size
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
266 || (asf_st->ds_packet_size/asf_st->ds_chunk_size <= 1))
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
267 asf_st->ds_span = 0; // disable descrambling
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
268 }
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
269 switch (st->codec->codec_id) {
232
eb90c0a5a1ba CODEC_ID_MP3LAME is obsolete
bellard
parents: 196
diff changeset
270 case CODEC_ID_MP3:
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
271 st->codec->frame_size = MPA_FRAME_SIZE;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
272 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
273 case CODEC_ID_PCM_S16LE:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
274 case CODEC_ID_PCM_S16BE:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
275 case CODEC_ID_PCM_U16LE:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
276 case CODEC_ID_PCM_U16BE:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
277 case CODEC_ID_PCM_S8:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
278 case CODEC_ID_PCM_U8:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
279 case CODEC_ID_PCM_ALAW:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
280 case CODEC_ID_PCM_MULAW:
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
281 st->codec->frame_size = 1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
282 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
283 default:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
284 /* This is probably wrong, but it prevents a crash later */
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
285 st->codec->frame_size = 1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
286 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
287 }
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
288 } else if (type == CODEC_TYPE_VIDEO) {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
289 get_le32(pb);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
290 get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
291 get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
292 size = get_le16(pb); /* size */
732
1221cba1c069 fixing demuxing of DV5700.asf
michael
parents: 708
diff changeset
293 sizeX= get_le32(pb); /* size */
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
294 st->codec->width = get_le32(pb);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
295 st->codec->height = get_le32(pb);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
296 /* not available for asf */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
297 get_le16(pb); /* panes */
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
298 st->codec->bits_per_sample = get_le16(pb); /* depth */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
299 tag1 = get_le32(pb);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
300 url_fskip(pb, 20);
732
1221cba1c069 fixing demuxing of DV5700.asf
michael
parents: 708
diff changeset
301 // av_log(NULL, AV_LOG_DEBUG, "size:%d tsize:%d sizeX:%d\n", size, total_size, sizeX);
1221cba1c069 fixing demuxing of DV5700.asf
michael
parents: 708
diff changeset
302 size= sizeX;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
303 if (size > 40) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
304 st->codec->extradata_size = size - 40;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
305 st->codec->extradata = av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
306 get_buffer(pb, st->codec->extradata, st->codec->extradata_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
307 }
297
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
308
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
309 /* Extract palette from extradata if bpp <= 8 */
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
310 /* This code assumes that extradata contains only palette */
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
311 /* This is true for all paletted codecs implemented in ffmpeg */
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
312 if (st->codec->extradata_size && (st->codec->bits_per_sample <= 8)) {
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
313 st->codec->palctrl = av_mallocz(sizeof(AVPaletteControl));
297
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
314 #ifdef WORDS_BIGENDIAN
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
315 for (i = 0; i < FFMIN(st->codec->extradata_size, AVPALETTE_SIZE)/4; i++)
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
316 st->codec->palctrl->palette[i] = bswap_32(((uint32_t*)st->codec->extradata)[i]);
297
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
317 #else
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
318 memcpy(st->codec->palctrl->palette, st->codec->extradata,
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
319 FFMIN(st->codec->extradata_size, AVPALETTE_SIZE));
297
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
320 #endif
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
321 st->codec->palctrl->palette_changed = 1;
297
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
322 }
85d558a18134 Make avi and asf demuxer export palette in palctrl
rtognimp
parents: 277
diff changeset
323
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
324 st->codec->codec_tag = tag1;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
325 st->codec->codec_id = codec_get_id(codec_bmp_tags, tag1);
573
b3adf6716dc3 dvr-ms video decoding support
michael
parents: 555
diff changeset
326 if(tag1 == MKTAG('D', 'V', 'R', ' '))
b3adf6716dc3 dvr-ms video decoding support
michael
parents: 555
diff changeset
327 st->need_parsing = 1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
328 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
329 pos2 = url_ftell(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
330 url_fskip(pb, gsize - (pos2 - pos1 + 24));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
331 } else if (!memcmp(&g, &data_header, sizeof(GUID))) {
1206
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
332 asf->data_object_offset = url_ftell(pb);
1552
de18846fa25c Minor modifications to handle mms streaming.
takis
parents: 1503
diff changeset
333 // if not streaming, gsize is not unlimited (how?), and there is enough space in the file..
de18846fa25c Minor modifications to handle mms streaming.
takis
parents: 1503
diff changeset
334 if (!(asf->hdr.flags & 0x01) && gsize != (uint64_t)-1 && gsize >= 24) {
1206
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
335 asf->data_object_size = gsize - 24;
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
336 } else {
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
337 asf->data_object_size = (uint64_t)-1;
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
338 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
339 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
340 } else if (!memcmp(&g, &comment_header, sizeof(GUID))) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
341 int len1, len2, len3, len4, len5;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
342
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
343 len1 = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
344 len2 = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
345 len3 = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
346 len4 = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
347 len5 = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
348 get_str16_nolen(pb, len1, s->title, sizeof(s->title));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
349 get_str16_nolen(pb, len2, s->author, sizeof(s->author));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
350 get_str16_nolen(pb, len3, s->copyright, sizeof(s->copyright));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
351 get_str16_nolen(pb, len4, s->comment, sizeof(s->comment));
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
352 url_fskip(pb, len5);
341
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
353 } else if (!memcmp(&g, &extended_content_header, sizeof(GUID))) {
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
354 int desc_count, i;
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
355
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
356 desc_count = get_le16(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
357 for(i=0;i<desc_count;i++)
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
358 {
1264
3d00cb7b7426 value_num should also be 64bit (1 hunk from the asf seeking patch by DrDivx/Steve Lhomme)
michael
parents: 1263
diff changeset
359 int name_len,value_type,value_len;
3d00cb7b7426 value_num should also be 64bit (1 hunk from the asf seeking patch by DrDivx/Steve Lhomme)
michael
parents: 1263
diff changeset
360 uint64_t value_num = 0;
341
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
361 char *name, *value;
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
362
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
363 name_len = get_le16(pb);
1503
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
364 name = (char *)av_malloc(name_len * 2);
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
365 get_str16_nolen(pb, name_len, name, name_len * 2);
341
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
366 value_type = get_le16(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
367 value_len = get_le16(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
368 if ((value_type == 0) || (value_type == 1)) // unicode or byte
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
369 {
1503
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
370 value = (char *)av_malloc(value_len * 2);
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
371 get_str16_nolen(pb, value_len, value,
a4ab86a48604 Use common macro PUT_UTF8 in asf.c
gpoirier
parents: 1443
diff changeset
372 value_len * 2);
643
253b5292946a various security fixes and precautionary checks
michael
parents: 627
diff changeset
373 if (strcmp(name,"WM/AlbumTitle")==0) { pstrcpy(s->album, sizeof(s->album), value); }
1603
26a7d15e4c9d Decode genre on asf/wma files.
aurel
parents: 1552
diff changeset
374 if (strcmp(name,"WM/Genre")==0) { pstrcpy(s->genre, sizeof(s->genre), value); }
341
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
375 av_free(value);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
376 }
792
michael
parents: 775
diff changeset
377 if ((value_type >= 2) && (value_type <= 5)) // boolean or DWORD or QWORD or WORD
341
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
378 {
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
379 if (value_type==2) value_num = get_le32(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
380 if (value_type==3) value_num = get_le32(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
381 if (value_type==4) value_num = get_le64(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
382 if (value_type==5) value_num = get_le16(pb);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
383 if (strcmp(name,"WM/Track")==0) s->track = value_num + 1;
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
384 if (strcmp(name,"WM/TrackNumber")==0) s->track = value_num;
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
385 }
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
386 av_free(name);
ad2a57c5467a ASF extended header parsing patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 312
diff changeset
387 }
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
388 } else if (!memcmp(&g, &ext_stream_header, sizeof(GUID))) {
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
389 int ext_len, payload_ext_ct, stream_ct;
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
390 uint32_t ext_d;
972
d983c2b9333e kill some warnings
mru
parents: 949
diff changeset
391 int64_t pos_ex_st;
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
392 pos_ex_st = url_ftell(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
393
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
394 get_le64(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
395 get_le64(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
396 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
397 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
398 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
399 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
400 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
401 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
402 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
403 get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
404 get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
405 get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
406 get_le64(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
407 stream_ct = get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
408 payload_ext_ct = get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
409
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
410 for (i=0; i<stream_ct; i++){
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
411 get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
412 ext_len = get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
413 url_fseek(pb, ext_len, SEEK_CUR);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
414 }
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
415
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
416 for (i=0; i<payload_ext_ct; i++){
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
417 get_guid(pb, &g);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
418 ext_d=get_le16(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
419 ext_len=get_le32(pb);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
420 url_fseek(pb, ext_len, SEEK_CUR);
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
421 }
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
422
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
423 // there could be a optional stream properties object to follow
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
424 // if so the next iteration will pick it up
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
425 } else if (!memcmp(&g, &head1_guid, sizeof(GUID))) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
426 int v1, v2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
427 get_guid(pb, &g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
428 v1 = get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
429 v2 = get_le16(pb);
904
5d3dc3a6bbe7 audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)
michael
parents: 896
diff changeset
430 #if 0
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
431 } else if (!memcmp(&g, &codec_comment_header, sizeof(GUID))) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
432 int len, v1, n, num;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
433 char str[256], *q;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
434 char tag[16];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
435
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
436 get_guid(pb, &g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
437 print_guid(&g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
438
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
439 n = get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
440 for(i=0;i<n;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
441 num = get_le16(pb); /* stream number */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
442 get_str16(pb, str, sizeof(str));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
443 get_str16(pb, str, sizeof(str));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
444 len = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
445 q = tag;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
446 while (len > 0) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
447 v1 = get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
448 if ((q - tag) < sizeof(tag) - 1)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
449 *q++ = v1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
450 len--;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
451 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
452 *q = '\0';
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
453 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
454 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
455 } else if (url_feof(pb)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
456 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
457 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
458 url_fseek(pb, gsize - 24, SEEK_CUR);
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 get_guid(pb, &g);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
462 get_le64(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
463 get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
464 get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
465 if (url_feof(pb))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
466 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
467 asf->data_offset = url_ftell(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
468 asf->packet_size_left = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
469
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
470 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
471
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
472 fail:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
473 for(i=0;i<s->nb_streams;i++) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
474 AVStream *st = s->streams[i];
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
475 if (st) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
476 av_free(st->priv_data);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
477 av_free(st->codec->extradata);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
478 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
479 av_free(st);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
480 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
481 return -1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
482 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
483
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
484 #define DO_2BITS(bits, var, defval) \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
485 switch (bits & 3) \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
486 { \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
487 case 3: var = get_le32(pb); rsize += 4; break; \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
488 case 2: var = get_le16(pb); rsize += 2; break; \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
489 case 1: var = get_byte(pb); rsize++; break; \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
490 default: var = defval; break; \
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
491 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
492
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
493 static int asf_get_packet(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
494 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
495 ASFContext *asf = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
496 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
497 uint32_t packet_length, padsize;
353
0778b93924cb header parser fix
michael
parents: 352
diff changeset
498 int rsize = 9;
0778b93924cb header parser fix
michael
parents: 352
diff changeset
499 int c;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
500
353
0778b93924cb header parser fix
michael
parents: 352
diff changeset
501 assert((url_ftell(&s->pb) - s->data_offset) % asf->packet_size == 0);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
502
353
0778b93924cb header parser fix
michael
parents: 352
diff changeset
503 c = get_byte(pb);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
504 if (c != 0x82) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
505 if (!url_feof(pb))
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
506 av_log(s, AV_LOG_ERROR, "ff asf bad header %x at:%"PRId64"\n", c, url_ftell(pb));
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
507 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
508 if ((c & 0x0f) == 2) { // always true for now
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
509 if (get_le16(pb) != 0) {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
510 if (!url_feof(pb))
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
511 av_log(s, AV_LOG_ERROR, "ff asf bad non zero\n");
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
512 return AVERROR_IO;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
513 }
353
0778b93924cb header parser fix
michael
parents: 352
diff changeset
514 rsize+=2;
0778b93924cb header parser fix
michael
parents: 352
diff changeset
515 /* }else{
0778b93924cb header parser fix
michael
parents: 352
diff changeset
516 if (!url_feof(pb))
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1415
diff changeset
517 printf("ff asf bad header %x at:%"PRId64"\n", c, url_ftell(pb));
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
518 return AVERROR_IO;*/
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
519 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
520
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
521 asf->packet_flags = get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
522 asf->packet_property = get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
523
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
524 DO_2BITS(asf->packet_flags >> 5, packet_length, asf->packet_size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
525 DO_2BITS(asf->packet_flags >> 1, padsize, 0); // sequence ignored
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
526 DO_2BITS(asf->packet_flags >> 3, padsize, 0); // padding length
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
527
1333
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
528 //the following checks prevent overflows and infinite loops
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
529 if(packet_length >= (1U<<29)){
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
530 av_log(s, AV_LOG_ERROR, "invalid packet_length %d at:%"PRId64"\n", packet_length, url_ftell(pb));
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
531 return 0; // FIXME this should be -1
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
532 }
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
533 if(padsize >= (1U<<29)){
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
534 av_log(s, AV_LOG_ERROR, "invalid padsize %d at:%"PRId64"\n", padsize, url_ftell(pb));
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
535 return 0; // FIXME this should be -1
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
536 }
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
537
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
538 asf->packet_timestamp = get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
539 get_le16(pb); /* duration */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
540 // rsize has at least 11 bytes which have to be present
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
541
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
542 if (asf->packet_flags & 0x01) {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
543 asf->packet_segsizetype = get_byte(pb); rsize++;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
544 asf->packet_segments = asf->packet_segsizetype & 0x3f;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
545 } else {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
546 asf->packet_segments = 1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
547 asf->packet_segsizetype = 0x80;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
548 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
549 asf->packet_size_left = packet_length - padsize - rsize;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
550 if (packet_length < asf->hdr.min_pktsize)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
551 padsize += asf->hdr.min_pktsize - packet_length;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
552 asf->packet_padsize = padsize;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
553 #ifdef DEBUG
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
554 printf("packet: size=%d padsize=%d left=%d\n", asf->packet_size, asf->packet_padsize, asf->packet_size_left);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
555 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
556 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
557 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
558
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
559 static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
560 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
561 ASFContext *asf = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
562 ASFStream *asf_st = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
563 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
564 //static int pc = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
565 for (;;) {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
566 int rsize = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
567 if (asf->packet_size_left < FRAME_HEADER_SIZE
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
568 || asf->packet_segments < 1) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
569 //asf->packet_size_left <= asf->packet_padsize) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
570 int ret = asf->packet_size_left + asf->packet_padsize;
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1415
diff changeset
571 //printf("PacketLeftSize:%d Pad:%d Pos:%"PRId64"\n", asf->packet_size_left, asf->packet_padsize, url_ftell(pb));
828
a5af9ba25343 round pointer up to next packet_size multiple
michael
parents: 820
diff changeset
572 if((url_ftell(&s->pb) + ret - s->data_offset) % asf->packet_size)
a5af9ba25343 round pointer up to next packet_size multiple
michael
parents: 820
diff changeset
573 ret += asf->packet_size - ((url_ftell(&s->pb) + ret - s->data_offset) % asf->packet_size);
1333
a95c384900ab prevent infinite loop with VORC012.WMA
michael
parents: 1332
diff changeset
574 assert(ret>=0);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
575 /* fail safe */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
576 url_fskip(pb, ret);
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
577 asf->packet_pos= url_ftell(&s->pb);
1206
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
578 if (asf->data_object_size != (uint64_t)-1 &&
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
579 (asf->packet_pos - asf->data_object_offset >= asf->data_object_size))
e60bf67d9bf8 The reader ignores the size of the ASF data object and keeps on
gpoirier
parents: 1172
diff changeset
580 return AVERROR_IO; /* Do not exceed the size of the data object */
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
581 ret = asf_get_packet(s);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
582 //printf("READ ASF PACKET %d r:%d c:%d\n", ret, asf->packet_size_left, pc++);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
583 if (ret < 0 || url_feof(pb))
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
584 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
585 asf->packet_time_start = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
586 continue;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
587 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
588 if (asf->packet_time_start == 0) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
589 /* read frame header */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
590 int num = get_byte(pb);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
591 asf->packet_segments--;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
592 rsize++;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
593 asf->packet_key_frame = (num & 0x80) >> 7;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
594 asf->stream_index = asf->asfid2avid[num & 0x7f];
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
595 // sequence should be ignored!
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
596 DO_2BITS(asf->packet_property >> 4, asf->packet_seq, 0);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
597 DO_2BITS(asf->packet_property >> 2, asf->packet_frag_offset, 0);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
598 DO_2BITS(asf->packet_property, asf->packet_replic_size, 0);
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
599 //printf("key:%d stream:%d seq:%d offset:%d replic_size:%d\n", asf->packet_key_frame, asf->stream_index, asf->packet_seq, //asf->packet_frag_offset, asf->packet_replic_size);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
600 if (asf->packet_replic_size > 1) {
352
c5ea5cdb5b58 replic_size==0 fix, needed so that G.726 asf file, so ffmpeg can at least decode the video without segfaulting
michael
parents: 351
diff changeset
601 assert(asf->packet_replic_size >= 8);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
602 // it should be always at least 8 bytes - FIXME validate
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
603 asf->packet_obj_size = get_le32(pb);
1660
e071dbfd4769 fix segfault with http://sam.zoy.org/zzuf/lol-ffplay.wmv
michael
parents: 1603
diff changeset
604 if(asf->packet_obj_size >= (1<<24) || asf->packet_obj_size <= 0){
e071dbfd4769 fix segfault with http://sam.zoy.org/zzuf/lol-ffplay.wmv
michael
parents: 1603
diff changeset
605 av_log(s, AV_LOG_ERROR, "packet_obj_size invalid\n");
e071dbfd4769 fix segfault with http://sam.zoy.org/zzuf/lol-ffplay.wmv
michael
parents: 1603
diff changeset
606 continue;
e071dbfd4769 fix segfault with http://sam.zoy.org/zzuf/lol-ffplay.wmv
michael
parents: 1603
diff changeset
607 }
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
608 asf->packet_frag_timestamp = get_le32(pb); // timestamp
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
609 if (asf->packet_replic_size > 8)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
610 url_fskip(pb, asf->packet_replic_size - 8);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
611 rsize += asf->packet_replic_size; // FIXME - check validity
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
612 } else if (asf->packet_replic_size==1){
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
613 // multipacket - frag_offset is begining timestamp
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
614 asf->packet_time_start = asf->packet_frag_offset;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
615 asf->packet_frag_offset = 0;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
616 asf->packet_frag_timestamp = asf->packet_timestamp;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
617
352
c5ea5cdb5b58 replic_size==0 fix, needed so that G.726 asf file, so ffmpeg can at least decode the video without segfaulting
michael
parents: 351
diff changeset
618 asf->packet_time_delta = get_byte(pb);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
619 rsize++;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
620 }else{
352
c5ea5cdb5b58 replic_size==0 fix, needed so that G.726 asf file, so ffmpeg can at least decode the video without segfaulting
michael
parents: 351
diff changeset
621 assert(asf->packet_replic_size==0);
c5ea5cdb5b58 replic_size==0 fix, needed so that G.726 asf file, so ffmpeg can at least decode the video without segfaulting
michael
parents: 351
diff changeset
622 }
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
623 if (asf->packet_flags & 0x01) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
624 DO_2BITS(asf->packet_segsizetype >> 6, asf->packet_frag_size, 0); // 0 is illegal
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
625 #undef DO_2BITS
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
626 //printf("Fragsize %d\n", asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
627 } else {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
628 asf->packet_frag_size = asf->packet_size_left - rsize;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
629 //printf("Using rest %d %d %d\n", asf->packet_frag_size, asf->packet_size_left, rsize);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
630 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
631 if (asf->packet_replic_size == 1) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
632 asf->packet_multi_size = asf->packet_frag_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
633 if (asf->packet_multi_size > asf->packet_size_left) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
634 asf->packet_segments = 0;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
635 continue;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
636 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
637 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
638 asf->packet_size_left -= rsize;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
639 //printf("___objsize____ %d %d rs:%d\n", asf->packet_obj_size, asf->packet_frag_offset, rsize);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
640
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
641 if (asf->stream_index < 0
708
d79164865a7c more fine grained discarding of packets
michael
parents: 652
diff changeset
642 || s->streams[asf->stream_index]->discard >= AVDISCARD_ALL
d79164865a7c more fine grained discarding of packets
michael
parents: 652
diff changeset
643 || (!asf->packet_key_frame && s->streams[asf->stream_index]->discard >= AVDISCARD_NONKEY)
d79164865a7c more fine grained discarding of packets
michael
parents: 652
diff changeset
644 ) {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
645 asf->packet_time_start = 0;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
646 /* unhandled packet (should not happen) */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
647 url_fskip(pb, asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
648 asf->packet_size_left -= asf->packet_frag_size;
652
b47948262721 support discarding uninterresting packets
michael
parents: 643
diff changeset
649 if(asf->stream_index < 0)
b47948262721 support discarding uninterresting packets
michael
parents: 643
diff changeset
650 av_log(s, AV_LOG_ERROR, "ff asf skip %d %d\n", asf->packet_frag_size, num & 0x7f);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
651 continue;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
652 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
653 asf->asf_st = s->streams[asf->stream_index]->priv_data;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
654 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
655 asf_st = asf->asf_st;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
656
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
657 if ((asf->packet_frag_offset != asf_st->frag_offset
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
658 || (asf->packet_frag_offset
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
659 && asf->packet_seq != asf_st->seq)) // seq should be ignored
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
660 ) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
661 /* cannot continue current packet: free it */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
662 // FIXME better check if packet was already allocated
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
663 av_log(s, AV_LOG_INFO, "ff asf parser skips: %d - %d o:%d - %d %d %d fl:%d\n",
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
664 asf_st->pkt.size,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
665 asf->packet_obj_size,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
666 asf->packet_frag_offset, asf_st->frag_offset,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
667 asf->packet_seq, asf_st->seq, asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
668 if (asf_st->pkt.size)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
669 av_free_packet(&asf_st->pkt);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
670 asf_st->frag_offset = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
671 if (asf->packet_frag_offset != 0) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
672 url_fskip(pb, asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
673 av_log(s, AV_LOG_INFO, "ff asf parser skipping %db\n", asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
674 asf->packet_size_left -= asf->packet_frag_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
675 continue;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
676 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
677 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
678 if (asf->packet_replic_size == 1) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
679 // frag_offset is here used as the begining timestamp
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
680 asf->packet_frag_timestamp = asf->packet_time_start;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
681 asf->packet_time_start += asf->packet_time_delta;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
682 asf->packet_obj_size = asf->packet_frag_size = get_byte(pb);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
683 asf->packet_size_left--;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
684 asf->packet_multi_size--;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
685 if (asf->packet_multi_size < asf->packet_obj_size)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
686 {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
687 asf->packet_time_start = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
688 url_fskip(pb, asf->packet_multi_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
689 asf->packet_size_left -= asf->packet_multi_size;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
690 continue;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
691 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
692 asf->packet_multi_size -= asf->packet_obj_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
693 //printf("COMPRESS size %d %d %d ms:%d\n", asf->packet_obj_size, asf->packet_frag_timestamp, asf->packet_size_left, asf->packet_multi_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
694 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
695 if (asf_st->frag_offset == 0) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
696 /* new packet */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
697 av_new_packet(&asf_st->pkt, asf->packet_obj_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
698 asf_st->seq = asf->packet_seq;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
699 asf_st->pkt.pts = asf->packet_frag_timestamp;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
700 asf_st->pkt.stream_index = asf->stream_index;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
701 asf_st->pkt.pos =
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
702 asf_st->packet_pos= asf->packet_pos;
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
703 //printf("new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n",
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
704 //asf->stream_index, asf->packet_key_frame, asf_st->pkt.flags & PKT_FLAG_KEY,
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
705 //s->streams[asf->stream_index]->codec->codec_type == CODEC_TYPE_AUDIO, asf->packet_obj_size);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
706 if (s->streams[asf->stream_index]->codec->codec_type == CODEC_TYPE_AUDIO)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
707 asf->packet_key_frame = 1;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
708 if (asf->packet_key_frame)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
709 asf_st->pkt.flags |= PKT_FLAG_KEY;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
710 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
711
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
712 /* read data */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
713 //printf("READ PACKET s:%d os:%d o:%d,%d l:%d DATA:%p\n",
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
714 // asf->packet_size, asf_st->pkt.size, asf->packet_frag_offset,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
715 // asf_st->frag_offset, asf->packet_frag_size, asf_st->pkt.data);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
716 asf->packet_size_left -= asf->packet_frag_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
717 if (asf->packet_size_left < 0)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
718 continue;
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
719 get_buffer(pb, asf_st->pkt.data + asf->packet_frag_offset,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
720 asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
721 asf_st->frag_offset += asf->packet_frag_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
722 /* test if whole packet is read */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
723 if (asf_st->frag_offset == asf_st->pkt.size) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
724 /* return packet */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
725 if (asf_st->ds_span > 1) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
726 /* packet descrambling */
1332
7474cc6383d4 fix some signedness warnings
mru
parents: 1266
diff changeset
727 uint8_t *newdata = av_malloc(asf_st->pkt.size);
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
728 if (newdata) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
729 int offset = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
730 while (offset < asf_st->pkt.size) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
731 int off = offset / asf_st->ds_chunk_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
732 int row = off / asf_st->ds_span;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
733 int col = off % asf_st->ds_span;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
734 int idx = row + col * asf_st->ds_packet_size / asf_st->ds_chunk_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
735 //printf("off:%d row:%d col:%d idx:%d\n", off, row, col, idx);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
736 memcpy(newdata + offset,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
737 asf_st->pkt.data + idx * asf_st->ds_chunk_size,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
738 asf_st->ds_chunk_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
739 offset += asf_st->ds_chunk_size;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
740 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
741 av_free(asf_st->pkt.data);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
742 asf_st->pkt.data = newdata;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
743 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
744 }
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
745 asf_st->frag_offset = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
746 memcpy(pkt, &asf_st->pkt, sizeof(AVPacket));
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
747 //printf("packet %d %d\n", asf_st->pkt.size, asf->packet_frag_size);
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
748 asf_st->pkt.size = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
749 asf_st->pkt.data = 0;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
750 break; // packet completed
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
751 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
752 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
753 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
754 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
755
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
756 static int asf_read_close(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
757 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
758 int i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
759
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
760 for(i=0;i<s->nb_streams;i++) {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
761 AVStream *st = s->streams[i];
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
762 av_free(st->priv_data);
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 792
diff changeset
763 av_free(st->codec->palctrl);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
764 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
765 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
766 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
767
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
768 // Added to support seeking after packets have been read
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
769 // If information is not reset, read_packet fails due to
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
770 // leftover information from previous reads
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
771 static void asf_reset_header(AVFormatContext *s)
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
772 {
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
773 ASFContext *asf = s->priv_data;
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
774 ASFStream *asf_st;
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
775 int i;
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
776
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
777 asf->packet_nb_frames = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
778 asf->packet_timestamp_start = -1;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
779 asf->packet_timestamp_end = -1;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
780 asf->packet_size_left = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
781 asf->packet_segments = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
782 asf->packet_flags = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
783 asf->packet_property = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
784 asf->packet_timestamp = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
785 asf->packet_segsizetype = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
786 asf->packet_segments = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
787 asf->packet_seq = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
788 asf->packet_replic_size = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
789 asf->packet_key_frame = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
790 asf->packet_padsize = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
791 asf->packet_frag_offset = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
792 asf->packet_frag_size = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
793 asf->packet_frag_timestamp = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
794 asf->packet_multi_size = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
795 asf->packet_obj_size = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
796 asf->packet_time_delta = 0;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
797 asf->packet_time_start = 0;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
798
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
799 for(i=0; i<s->nb_streams; i++){
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
800 asf_st= s->streams[i]->priv_data;
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
801 av_free_packet(&asf_st->pkt);
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
802 asf_st->frag_offset=0;
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
803 asf_st->seq=0;
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
804 }
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
805 asf->asf_st= NULL;
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
806 }
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
807
437
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
808 static int64_t asf_read_pts(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit)
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
809 {
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
810 ASFContext *asf = s->priv_data;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
811 AVPacket pkt1, *pkt = &pkt1;
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
812 ASFStream *asf_st;
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
813 int64_t pts;
348
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
814 int64_t pos= *ppos;
354
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
815 int i;
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
816 int64_t start_pos[s->nb_streams];
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
817
354
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
818 for(i=0; i<s->nb_streams; i++){
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
819 start_pos[i]= pos;
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
820 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
821
437
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
822 pos= (pos+asf->packet_size-1-s->data_offset)/asf->packet_size*asf->packet_size+ s->data_offset;
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
823 *ppos= pos;
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
824 url_fseek(&s->pb, pos, SEEK_SET);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
825
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
826 //printf("asf_read_pts\n");
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
827 asf_reset_header(s);
354
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
828 for(;;){
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
829 if (av_read_frame(s, pkt) < 0){
370
845f9de2c883 av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 355
diff changeset
830 av_log(s, AV_LOG_INFO, "seek failed\n");
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
831 return AV_NOPTS_VALUE;
349
2bed194f8362 seeking fixes
michael
parents: 348
diff changeset
832 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
833
991
30b54c043135 timebase fix
michael
parents: 979
diff changeset
834 pts= pkt->pts;
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
835
348
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
836 av_free_packet(pkt);
354
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
837 if(pkt->flags&PKT_FLAG_KEY){
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
838 i= pkt->stream_index;
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
839
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
840 asf_st= s->streams[i]->priv_data;
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
841
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
842 assert((asf_st->packet_pos - s->data_offset) % asf->packet_size == 0);
437
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
843 pos= asf_st->packet_pos;
351
c072833fe7f4 use packet number instead of byte number internally for seeking
michael
parents: 350
diff changeset
844
1266
5b9729f5145c fix fallback if theres no index
michael
parents: 1265
diff changeset
845 av_add_index_entry(s->streams[i], pos, pts, pkt->size, pos - start_pos[i] + 1, AVINDEX_KEYFRAME);
437
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
846 start_pos[i]= asf_st->packet_pos + 1;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
847
354
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
848 if(pkt->stream_index == stream_index)
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
849 break;
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
850 }
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
851 }
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
852
6770ca07abe2 store searched distance in index, so we dont waste time searching for keyframes where we already searched
michael
parents: 353
diff changeset
853 *ppos= pos;
1443
404048ea11bc Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 1415
diff changeset
854 //printf("found keyframe at %"PRId64" stream %d stamp:%"PRId64"\n", *ppos, stream_index, pts);
348
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
855
ca519d041ea1 memleak fix
michael
parents: 347
diff changeset
856 return pts;
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
857 }
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
858
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
859 static void asf_build_simple_index(AVFormatContext *s, int stream_index)
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
860 {
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
861 GUID g;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
862 ASFContext *asf = s->priv_data;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
863 int64_t gsize, itime;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
864 int64_t pos, current_pos, index_pts;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
865 int i;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
866 int pct,ict;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
867
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
868 current_pos = url_ftell(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
869
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
870 url_fseek(&s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
871 get_guid(&s->pb, &g);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
872 if (!memcmp(&g, &index_guid, sizeof(GUID))) {
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
873 gsize = get_le64(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
874 get_guid(&s->pb, &g);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
875 itime=get_le64(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
876 pct=get_le32(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
877 ict=get_le32(&s->pb);
1388
3172bf94c066 Use proper PRI?64 macros for %ll? format to fix printf format warnings:
rathann
parents: 1358
diff changeset
878 av_log(NULL, AV_LOG_DEBUG, "itime:0x%"PRIx64", pct:%d, ict:%d\n",itime,pct,ict);
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
879
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
880 for (i=0;i<ict;i++){
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
881 int pktnum=get_le32(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
882 int pktct =get_le16(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
883 av_log(NULL, AV_LOG_DEBUG, "pktnum:%d, pktct:%d\n", pktnum, pktct);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
884
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
885 pos=s->data_offset + asf->packet_size*(int64_t)pktnum;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
886 index_pts=av_rescale(itime, i, 10000);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
887
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
888 av_add_index_entry(s->streams[stream_index], pos, index_pts, asf->packet_size, 0, AVINDEX_KEYFRAME);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
889 }
1266
5b9729f5145c fix fallback if theres no index
michael
parents: 1265
diff changeset
890 asf->index_read= 1;
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
891 }
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
892 url_fseek(&s->pb, current_pos, SEEK_SET);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
893 }
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
894
555
0a997108f384 use native timebase for seeking
michael
parents: 482
diff changeset
895 static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
896 {
312
8a04d2e1be2f frame rate should be completely disabled in asf (closer now) - disabled seek
bellard
parents: 300
diff changeset
897 ASFContext *asf = s->priv_data;
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
898 AVStream *st = s->streams[stream_index];
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
899 int64_t pos;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
900 int index;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 881
diff changeset
901
350
michael
parents: 349
diff changeset
902 if (asf->packet_size <= 0)
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
903 return -1;
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
904
1266
5b9729f5145c fix fallback if theres no index
michael
parents: 1265
diff changeset
905 if (!asf->index_read)
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
906 asf_build_simple_index(s, stream_index);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
907
1266
5b9729f5145c fix fallback if theres no index
michael
parents: 1265
diff changeset
908 if(!(asf->index_read && st->index_entries)){
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
909 if(av_seek_frame_binary(s, stream_index, pts, flags)<0)
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
910 return -1;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
911 }else{
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
912 index= av_index_search_timestamp(st, pts, flags);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
913 if(index<0)
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
914 return -1;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
915
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
916 /* find the position */
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
917 pos = st->index_entries[index].pos;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
918 pts = st->index_entries[index].timestamp;
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
919
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
920 // various attempts to find key frame have failed so far
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
921 // asf_reset_header(s);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
922 // url_fseek(&s->pb, pos, SEEK_SET);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
923 // key_pos = pos;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
924 // for(i=0;i<16;i++){
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
925 // pos = url_ftell(&s->pb);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
926 // if (av_read_frame(s, &pkt) < 0){
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
927 // av_log(s, AV_LOG_INFO, "seek failed\n");
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
928 // return -1;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
929 // }
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
930 // asf_st = s->streams[stream_index]->priv_data;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
931 // pos += st->parser->frame_offset;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
932 //
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
933 // if (pkt.size > b) {
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
934 // b = pkt.size;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
935 // key_pos = pos;
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
936 // }
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
937 //
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
938 // av_free_packet(&pkt);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
939 // }
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
940
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
941 /* do the seek */
1388
3172bf94c066 Use proper PRI?64 macros for %ll? format to fix printf format warnings:
rathann
parents: 1358
diff changeset
942 av_log(NULL, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos);
1265
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
943 url_fseek(&s->pb, pos, SEEK_SET);
613fdf995af0 read and use index (based on a patch by John Donaghy on the 23-03-2006 '[Ffmpeg-devel] dvr-ms seek help request')
michael
parents: 1264
diff changeset
944 }
347
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
945 asf_reset_header(s);
2b485a3c5cfb seeking in single stream asf patch by ("Kevin Kuphal" <kevin dot kuphal at sitecity dot net>)
michael
parents: 341
diff changeset
946 return 0;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
947 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
948
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
949 AVInputFormat asf_demuxer = {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
950 "asf",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
951 "asf format",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
952 sizeof(ASFContext),
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
953 asf_probe,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
954 asf_read_header,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
955 asf_read_packet,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
956 asf_read_close,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
957 asf_read_seek,
437
50bae308f71e moving nearly identical binary search code from nut/mpeg/asf to utils.c
michael
parents: 373
diff changeset
958 asf_read_pts,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
959 };