annotate swf.c @ 1960:c0289552590f libavformat

Change the vhook code to send real timestamps to the filters instead of the current time of day, which is useless, and which the filters could just as easily query for themselves. patch by Bobby Bingham, uhmmmm gmail com
author diego
date Thu, 29 Mar 2007 05:24:35 +0000
parents 04f9a3ae30af
children 1a3c9056982a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1 /*
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
2 * Flash Compatible Streaming Format
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
3 * Copyright (c) 2000 Fabrice Bellard.
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
4 * Copyright (c) 2003 Tinic Uro.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
5 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1305
diff changeset
6 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1305
diff changeset
7 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1305
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
10 * 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: 1305
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
12 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1305
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
16 * Lesser General Public License for more details.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
17 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
18 * 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: 1305
diff changeset
19 * 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
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
21 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
22 #include "avformat.h"
628
8909a59c9461 common.h -> common.h/bitstream.h
michael
parents: 516
diff changeset
23 #include "bitstream.h"
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
24 #include "riff.h" /* for CodecTag */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
25
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
26 /* should have a generic way to indicate probable size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
27 #define DUMMY_FILE_SIZE (100 * 1024 * 1024)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
28 #define DUMMY_DURATION 600 /* in seconds */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
29
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
30 #define TAG_END 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
31 #define TAG_SHOWFRAME 1
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
32 #define TAG_DEFINESHAPE 2
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
33 #define TAG_FREECHARACTER 3
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
34 #define TAG_PLACEOBJECT 4
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
35 #define TAG_REMOVEOBJECT 5
807
alex
parents: 806
diff changeset
36 #define TAG_STREAMHEAD 18
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
37 #define TAG_STREAMBLOCK 19
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
38 #define TAG_JPEG2 21
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
39 #define TAG_PLACEOBJECT2 26
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
40 #define TAG_STREAMHEAD2 45
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
41 #define TAG_VIDEOSTREAM 60
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
42 #define TAG_VIDEOFRAME 61
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
43
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
44 #define TAG_LONG 0x100
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
45
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
46 /* flags for shape definition */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
47 #define FLAG_MOVETO 0x01
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
48 #define FLAG_SETFILL0 0x02
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
49 #define FLAG_SETFILL1 0x04
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
50
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
51 #define AUDIO_FIFO_SIZE 65536
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
52
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
53 /* character id used */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
54 #define BITMAP_ID 0
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
55 #define VIDEO_ID 0
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
56 #define SHAPE_ID 1
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
57
516
59ddf98a5c65 nonsense removial
michael
parents: 482
diff changeset
58 #undef NDEBUG
59ddf98a5c65 nonsense removial
michael
parents: 482
diff changeset
59 #include <assert.h>
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
60
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
61 typedef struct {
1638
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
62 int audio_stream_index;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
63 offset_t duration_pos;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
64 offset_t tag_pos;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
65
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
66 int samples_per_frame;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
67 int sound_samples;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
68 int swf_frame_number;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
69 int video_frame_number;
1889
e81bae269ae1 fix pts handling
bcoudurier
parents: 1882
diff changeset
70 int frame_rate;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
71 int tag;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
72
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
73 uint8_t audio_fifo[AUDIO_FIFO_SIZE];
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
74 int audio_in_pos;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
75
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
76 int video_type;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
77 int audio_type;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
78 } SWFContext;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
79
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1673
diff changeset
80 static const AVCodecTag swf_codec_tags[] = {
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
81 {CODEC_ID_FLV1, 0x02},
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
82 {CODEC_ID_VP6F, 0x04},
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
83 {0, 0},
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
84 };
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
85
1833
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
86 static const AVCodecTag swf_audio_codec_tags[] = {
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
87 {CODEC_ID_PCM_S16LE, 0x00},
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
88 {CODEC_ID_ADPCM_SWF, 0x01},
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
89 {CODEC_ID_MP3, 0x02},
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
90 {CODEC_ID_PCM_S16LE, 0x03},
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
91 //{CODEC_ID_NELLYMOSER, 0x06},
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
92 {0, 0},
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
93 };
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
94
858
66cc656ea404 Replace CONFIG_ENCODERS/CONFIG_DECODERS with CONFIG_MUXERS/CONFIG_DEMUXERS
diego
parents: 820
diff changeset
95 #ifdef CONFIG_MUXERS
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
96 static void put_swf_tag(AVFormatContext *s, int tag)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
97 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
98 SWFContext *swf = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
99 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
100
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
101 swf->tag_pos = url_ftell(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
102 swf->tag = tag;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
103 /* reserve some room for the tag */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
104 if (tag & TAG_LONG) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
105 put_le16(pb, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
106 put_le32(pb, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
107 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
108 put_le16(pb, 0);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
109 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
110 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
111
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
112 static void put_swf_end_tag(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
113 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
114 SWFContext *swf = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
115 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
116 offset_t pos;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
117 int tag_len, tag;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
118
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
119 pos = url_ftell(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
120 tag_len = pos - swf->tag_pos - 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
121 tag = swf->tag;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
122 url_fseek(pb, swf->tag_pos, SEEK_SET);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
123 if (tag & TAG_LONG) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
124 tag &= ~TAG_LONG;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
125 put_le16(pb, (tag << 6) | 0x3f);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
126 put_le32(pb, tag_len - 4);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
127 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
128 assert(tag_len < 0x3f);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
129 put_le16(pb, (tag << 6) | tag_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
130 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
131 url_fseek(pb, pos, SEEK_SET);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
132 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
133
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
134 static inline void max_nbits(int *nbits_ptr, int val)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
135 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
136 int n;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
137
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
138 if (val == 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
139 return;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
140 val = abs(val);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
141 n = 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
142 while (val != 0) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
143 n++;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
144 val >>= 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
145 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
146 if (n > *nbits_ptr)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
147 *nbits_ptr = n;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
148 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
149
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
150 static void put_swf_rect(ByteIOContext *pb,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
151 int xmin, int xmax, int ymin, int ymax)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
152 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
153 PutBitContext p;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 5
diff changeset
154 uint8_t buf[256];
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
155 int nbits, mask;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
156
276
3dd3646e0164 init_put_bits changed
alex
parents: 241
diff changeset
157 init_put_bits(&p, buf, sizeof(buf));
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
158
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
159 nbits = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
160 max_nbits(&nbits, xmin);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
161 max_nbits(&nbits, xmax);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
162 max_nbits(&nbits, ymin);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
163 max_nbits(&nbits, ymax);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
164 mask = (1 << nbits) - 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
165
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
166 /* rectangle info */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
167 put_bits(&p, 5, nbits);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
168 put_bits(&p, nbits, xmin & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
169 put_bits(&p, nbits, xmax & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
170 put_bits(&p, nbits, ymin & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
171 put_bits(&p, nbits, ymax & mask);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
172
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
173 flush_put_bits(&p);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
174 put_buffer(pb, buf, pbBufPtr(&p) - p.buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
175 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
176
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
177 static void put_swf_line_edge(PutBitContext *pb, int dx, int dy)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
178 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
179 int nbits, mask;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
180
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
181 put_bits(pb, 1, 1); /* edge */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
182 put_bits(pb, 1, 1); /* line select */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
183 nbits = 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
184 max_nbits(&nbits, dx);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
185 max_nbits(&nbits, dy);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
186
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
187 mask = (1 << nbits) - 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
188 put_bits(pb, 4, nbits - 2); /* 16 bits precision */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
189 if (dx == 0) {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
190 put_bits(pb, 1, 0);
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
191 put_bits(pb, 1, 1);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
192 put_bits(pb, nbits, dy & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
193 } else if (dy == 0) {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
194 put_bits(pb, 1, 0);
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
195 put_bits(pb, 1, 0);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
196 put_bits(pb, nbits, dx & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
197 } else {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
198 put_bits(pb, 1, 1);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
199 put_bits(pb, nbits, dx & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
200 put_bits(pb, nbits, dy & mask);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
201 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
202 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
203
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
204 #define FRAC_BITS 16
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
205
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
206 /* put matrix */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
207 static void put_swf_matrix(ByteIOContext *pb,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
208 int a, int b, int c, int d, int tx, int ty)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
209 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
210 PutBitContext p;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 5
diff changeset
211 uint8_t buf[256];
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
212 int nbits;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
213
276
3dd3646e0164 init_put_bits changed
alex
parents: 241
diff changeset
214 init_put_bits(&p, buf, sizeof(buf));
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
215
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
216 put_bits(&p, 1, 1); /* a, d present */
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
217 nbits = 1;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
218 max_nbits(&nbits, a);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
219 max_nbits(&nbits, d);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
220 put_bits(&p, 5, nbits); /* nb bits */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
221 put_bits(&p, nbits, a);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
222 put_bits(&p, nbits, d);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
223
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
224 put_bits(&p, 1, 1); /* b, c present */
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
225 nbits = 1;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
226 max_nbits(&nbits, c);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
227 max_nbits(&nbits, b);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
228 put_bits(&p, 5, nbits); /* nb bits */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
229 put_bits(&p, nbits, c);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
230 put_bits(&p, nbits, b);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
231
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
232 nbits = 1;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
233 max_nbits(&nbits, tx);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
234 max_nbits(&nbits, ty);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
235 put_bits(&p, 5, nbits); /* nb bits */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
236 put_bits(&p, nbits, tx);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
237 put_bits(&p, nbits, ty);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
238
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
239 flush_put_bits(&p);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
240 put_buffer(pb, buf, pbBufPtr(&p) - p.buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
241 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
242
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
243 /* */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
244 static int swf_write_header(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
245 {
1623
bdb50e314f29 priv_data is allocated/freed internally
bcoudurier
parents: 1620
diff changeset
246 SWFContext *swf = s->priv_data;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
247 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
248 AVCodecContext *enc, *audio_enc, *video_enc;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
249 PutBitContext p;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 5
diff changeset
250 uint8_t buf1[256];
85
25062c9b1f86 per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents: 65
diff changeset
251 int i, width, height, rate, rate_base;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
252
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
253 swf->audio_in_pos = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
254 swf->sound_samples = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
255 swf->swf_frame_number = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
256 swf->video_frame_number = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
257
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
258 video_enc = NULL;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
259 audio_enc = NULL;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
260 for(i=0;i<s->nb_streams;i++) {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 807
diff changeset
261 enc = s->streams[i]->codec;
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
262 if (enc->codec_type == CODEC_TYPE_AUDIO) {
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
263 if (enc->codec_id == CODEC_ID_MP3) {
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
264 if (!enc->frame_size) {
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
265 av_log(s, AV_LOG_ERROR, "audio frame size not set\n");
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
266 return -1;
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
267 }
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
268 audio_enc = enc;
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
269 } else {
1865
eef72288a33e use AVFormatContext with av_log
bcoudurier
parents: 1864
diff changeset
270 av_log(s, AV_LOG_ERROR, "SWF muxer only supports MP3\n");
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
271 return -1;
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
272 }
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
273 } else {
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
274 if ( enc->codec_id == CODEC_ID_VP6F ||
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
275 enc->codec_id == CODEC_ID_FLV1 ||
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
276 enc->codec_id == CODEC_ID_MJPEG ) {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
277 video_enc = enc;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
278 } else {
1865
eef72288a33e use AVFormatContext with av_log
bcoudurier
parents: 1864
diff changeset
279 av_log(s, AV_LOG_ERROR, "SWF muxer only supports VP6, FLV1 and MJPEG\n");
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
280 return -1;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
281 }
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
282 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
283 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
284
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
285 if (!video_enc) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
286 /* currenty, cannot work correctly if audio only */
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
287 swf->video_type = 0;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
288 width = 320;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
289 height = 200;
85
25062c9b1f86 per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents: 65
diff changeset
290 rate = 10;
25062c9b1f86 per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents: 65
diff changeset
291 rate_base= 1;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
292 } else {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
293 swf->video_type = video_enc->codec_id;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
294 width = video_enc->width;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
295 height = video_enc->height;
743
af4e24d6310c switch to native time bases
michael
parents: 628
diff changeset
296 rate = video_enc->time_base.den;
af4e24d6310c switch to native time bases
michael
parents: 628
diff changeset
297 rate_base = video_enc->time_base.num;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
298 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
299
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
300 if (!audio_enc ) {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
301 swf->audio_type = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
302 swf->samples_per_frame = ( 44100. * rate_base ) / rate;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
303 } else {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
304 swf->audio_type = audio_enc->codec_id;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
305 swf->samples_per_frame = ( ( audio_enc->sample_rate ) * rate_base ) / rate;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
306 }
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
307
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
308 put_tag(pb, "FWS");
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
309 if ( video_enc && video_enc->codec_id == CODEC_ID_VP6F ) {
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
310 put_byte(pb, 8); /* version (version 8 and above support VP6 codec) */
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
311 } else if ( video_enc && video_enc->codec_id == CODEC_ID_FLV1 ) {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
312 put_byte(pb, 6); /* version (version 6 and above support FLV1 codec) */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
313 } else {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
314 put_byte(pb, 4); /* version (should use 4 for mpeg audio support) */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
315 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
316 put_le32(pb, DUMMY_FILE_SIZE); /* dummy size
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
317 (will be patched if not streamed) */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
318
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
319 put_swf_rect(pb, 0, width * 20, 0, height * 20);
85
25062c9b1f86 per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents: 65
diff changeset
320 put_le16(pb, (rate * 256) / rate_base); /* frame rate */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
321 swf->duration_pos = url_ftell(pb);
85
25062c9b1f86 per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents: 65
diff changeset
322 put_le16(pb, (uint16_t)(DUMMY_DURATION * (int64_t)rate / rate_base)); /* frame count */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
323
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
324 /* define a shape with the jpeg inside */
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
325 if ( video_enc && (video_enc->codec_id == CODEC_ID_VP6F ||
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
326 video_enc->codec_id == CODEC_ID_FLV1 )) {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
327 } else if ( video_enc && video_enc->codec_id == CODEC_ID_MJPEG ) {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
328 put_swf_tag(s, TAG_DEFINESHAPE);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
329
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
330 put_le16(pb, SHAPE_ID); /* ID of shape */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
331 /* bounding rectangle */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
332 put_swf_rect(pb, 0, width, 0, height);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
333 /* style info */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
334 put_byte(pb, 1); /* one fill style */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
335 put_byte(pb, 0x41); /* clipped bitmap fill */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
336 put_le16(pb, BITMAP_ID); /* bitmap ID */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
337 /* position of the bitmap */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
338 put_swf_matrix(pb, (int)(1.0 * (1 << FRAC_BITS)), 0,
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
339 0, (int)(1.0 * (1 << FRAC_BITS)), 0, 0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
340 put_byte(pb, 0); /* no line style */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
341
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
342 /* shape drawing */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
343 init_put_bits(&p, buf1, sizeof(buf1));
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
344 put_bits(&p, 4, 1); /* one fill bit */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
345 put_bits(&p, 4, 0); /* zero line bit */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
346
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
347 put_bits(&p, 1, 0); /* not an edge */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
348 put_bits(&p, 5, FLAG_MOVETO | FLAG_SETFILL0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
349 put_bits(&p, 5, 1); /* nbits */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
350 put_bits(&p, 1, 0); /* X */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
351 put_bits(&p, 1, 0); /* Y */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
352 put_bits(&p, 1, 1); /* set fill style 1 */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
353
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
354 /* draw the rectangle ! */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
355 put_swf_line_edge(&p, width, 0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
356 put_swf_line_edge(&p, 0, height);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
357 put_swf_line_edge(&p, -width, 0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
358 put_swf_line_edge(&p, 0, -height);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
359
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
360 /* end of shape */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
361 put_bits(&p, 1, 0); /* not an edge */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
362 put_bits(&p, 5, 0);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
363
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
364 flush_put_bits(&p);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
365 put_buffer(pb, buf1, pbBufPtr(&p) - p.buf);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
366
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
367 put_swf_end_tag(s);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
368 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
369
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
370 if (audio_enc && audio_enc->codec_id == CODEC_ID_MP3 ) {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
371 int v;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
372
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
373 /* start sound */
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
374 put_swf_tag(s, TAG_STREAMHEAD2);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
375
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
376 v = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
377 switch(audio_enc->sample_rate) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
378 case 11025:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
379 v |= 1 << 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
380 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
381 case 22050:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
382 v |= 2 << 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
383 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
384 case 44100:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
385 v |= 3 << 2;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
386 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
387 default:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
388 /* not supported */
1519
f57c7614ff98 print error when unsupported sample rate is used with swf
bcoudurier
parents: 1417
diff changeset
389 av_log(s, AV_LOG_ERROR, "swf doesnt support that sample rate, choose from (44100, 22050, 11025)\n");
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
390 return -1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
391 }
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
392 v |= 0x02; /* 16 bit playback */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
393 if (audio_enc->channels == 2)
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
394 v |= 0x01; /* stereo playback */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
395 put_byte(&s->pb, v);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
396 v |= 0x20; /* mp3 compressed */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
397 put_byte(&s->pb, v);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
398 put_le16(&s->pb, swf->samples_per_frame); /* avg samples per frame */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
399 put_le16(&s->pb, 0);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
400
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
401 put_swf_end_tag(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
402 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
403
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
404 put_flush_packet(&s->pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
405 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
406 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
407
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
408 static int swf_write_video(AVFormatContext *s,
241
3d92f793fd67 64 bit pts for writing - more const usage
bellard
parents: 187
diff changeset
409 AVCodecContext *enc, const uint8_t *buf, int size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
410 {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
411 SWFContext *swf = s->priv_data;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
412 ByteIOContext *pb = &s->pb;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
413
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
414 /* Flash Player limit */
360
81e90b91f457 no limits!, warning is enough
michael
parents: 359
diff changeset
415 if ( swf->swf_frame_number == 16000 ) {
370
845f9de2c883 av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 360
diff changeset
416 av_log(enc, AV_LOG_INFO, "warning: Flash Player limit of 16000 frames reached\n");
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
417 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
418
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
419 if ( swf->video_type == CODEC_ID_VP6F ||
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
420 swf->video_type == CODEC_ID_FLV1 ) {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
421 if ( swf->video_frame_number == 0 ) {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
422 /* create a new video object */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
423 put_swf_tag(s, TAG_VIDEOSTREAM);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
424 put_le16(pb, VIDEO_ID);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
425 put_le16(pb, 15000 ); /* hard flash player limit */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
426 put_le16(pb, enc->width);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
427 put_le16(pb, enc->height);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
428 put_byte(pb, 0);
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1169
diff changeset
429 put_byte(pb,codec_get_tag(swf_codec_tags,swf->video_type));
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
430 put_swf_end_tag(s);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
431
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
432 /* place the video object for the first time */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
433 put_swf_tag(s, TAG_PLACEOBJECT2);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
434 put_byte(pb, 0x36);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
435 put_le16(pb, 1);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
436 put_le16(pb, VIDEO_ID);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
437 put_swf_matrix(pb, 1 << FRAC_BITS, 0, 0, 1 << FRAC_BITS, 0, 0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
438 put_le16(pb, swf->video_frame_number );
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
439 put_byte(pb, 'v');
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
440 put_byte(pb, 'i');
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
441 put_byte(pb, 'd');
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
442 put_byte(pb, 'e');
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
443 put_byte(pb, 'o');
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
444 put_byte(pb, 0x00);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
445 put_swf_end_tag(s);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
446 } else {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
447 /* mark the character for update */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
448 put_swf_tag(s, TAG_PLACEOBJECT2);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
449 put_byte(pb, 0x11);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
450 put_le16(pb, 1);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
451 put_le16(pb, swf->video_frame_number );
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
452 put_swf_end_tag(s);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
453 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
454
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
455 /* set video frame data */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
456 put_swf_tag(s, TAG_VIDEOFRAME | TAG_LONG);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
457 put_le16(pb, VIDEO_ID);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
458 put_le16(pb, swf->video_frame_number++ );
516
59ddf98a5c65 nonsense removial
michael
parents: 482
diff changeset
459 put_buffer(pb, buf, size);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
460 put_swf_end_tag(s);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
461 } else if ( swf->video_type == CODEC_ID_MJPEG ) {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
462 if (swf->swf_frame_number > 0) {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
463 /* remove the shape */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
464 put_swf_tag(s, TAG_REMOVEOBJECT);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
465 put_le16(pb, SHAPE_ID); /* shape ID */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
466 put_le16(pb, 1); /* depth */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
467 put_swf_end_tag(s);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
468
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
469 /* free the bitmap */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
470 put_swf_tag(s, TAG_FREECHARACTER);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
471 put_le16(pb, BITMAP_ID);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
472 put_swf_end_tag(s);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
473 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
474
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
475 put_swf_tag(s, TAG_JPEG2 | TAG_LONG);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
476
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
477 put_le16(pb, BITMAP_ID); /* ID of the image */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
478
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
479 /* a dummy jpeg header seems to be required */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
480 put_byte(pb, 0xff);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
481 put_byte(pb, 0xd8);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
482 put_byte(pb, 0xff);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
483 put_byte(pb, 0xd9);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
484 /* write the jpeg image */
516
59ddf98a5c65 nonsense removial
michael
parents: 482
diff changeset
485 put_buffer(pb, buf, size);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
486
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
487 put_swf_end_tag(s);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
488
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
489 /* draw the shape */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
490
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
491 put_swf_tag(s, TAG_PLACEOBJECT);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
492 put_le16(pb, SHAPE_ID); /* shape ID */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
493 put_le16(pb, 1); /* depth */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
494 put_swf_matrix(pb, 20 << FRAC_BITS, 0, 0, 20 << FRAC_BITS, 0, 0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
495 put_swf_end_tag(s);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
496 } else {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
497 /* invalid codec */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
498 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
499
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
500 swf->swf_frame_number ++;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
501
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
502 /* streaming sound always should be placed just before showframe tags */
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
503 if (swf->audio_type && swf->audio_in_pos) {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
504 put_swf_tag(s, TAG_STREAMBLOCK | TAG_LONG);
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
505 put_le16(pb, swf->sound_samples);
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
506 put_le16(pb, 0); // seek samples
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
507 put_buffer(pb, swf->audio_fifo, swf->audio_in_pos);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
508 put_swf_end_tag(s);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
509
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
510 /* update FIFO */
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
511 swf->sound_samples = 0;
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
512 swf->audio_in_pos = 0;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
513 }
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
514
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
515 /* output the frame */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
516 put_swf_tag(s, TAG_SHOWFRAME);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
517 put_swf_end_tag(s);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
518
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
519 put_flush_packet(&s->pb);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
520
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
521 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
522 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
523
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
524 static int swf_write_audio(AVFormatContext *s,
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
525 AVCodecContext *enc, const uint8_t *buf, int size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
526 {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
527 SWFContext *swf = s->priv_data;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
528
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
529 /* Flash Player limit */
360
81e90b91f457 no limits!, warning is enough
michael
parents: 359
diff changeset
530 if ( swf->swf_frame_number == 16000 ) {
370
845f9de2c883 av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 360
diff changeset
531 av_log(enc, AV_LOG_INFO, "warning: Flash Player limit of 16000 frames reached\n");
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
532 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
533
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
534 if (swf->audio_in_pos + size >= AUDIO_FIFO_SIZE) {
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
535 av_log(s, AV_LOG_ERROR, "audio fifo too small to mux audio essence\n");
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
536 return -1;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
537 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
538
1854
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
539 memcpy(swf->audio_fifo + swf->audio_in_pos, buf, size);
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
540 swf->audio_in_pos += size;
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
541 swf->sound_samples += enc->frame_size;
0432f6b969b0 simplify swf muxer
bcoudurier
parents: 1833
diff changeset
542
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
543 /* if audio only stream make sure we add swf frames */
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
544 if ( swf->video_type == 0 ) {
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
545 swf_write_video(s, enc, 0, 0);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
546 }
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
547
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
548 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
549 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
550
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 462
diff changeset
551 static int swf_write_packet(AVFormatContext *s, AVPacket *pkt)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
552 {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 807
diff changeset
553 AVCodecContext *codec = s->streams[pkt->stream_index]->codec;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
554 if (codec->codec_type == CODEC_TYPE_AUDIO)
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 462
diff changeset
555 return swf_write_audio(s, codec, pkt->data, pkt->size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
556 else
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 462
diff changeset
557 return swf_write_video(s, codec, pkt->data, pkt->size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
558 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
559
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
560 static int swf_write_trailer(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
561 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
562 SWFContext *swf = s->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
563 ByteIOContext *pb = &s->pb;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
564 AVCodecContext *enc, *video_enc;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
565 int file_size, i;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
566
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
567 video_enc = NULL;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
568 for(i=0;i<s->nb_streams;i++) {
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 807
diff changeset
569 enc = s->streams[i]->codec;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
570 if (enc->codec_type == CODEC_TYPE_VIDEO)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
571 video_enc = enc;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
572 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
573
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
574 put_swf_tag(s, TAG_END);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
575 put_swf_end_tag(s);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
576
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
577 put_flush_packet(&s->pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
578
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
579 /* patch file size and number of frames if not streamed */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
580 if (!url_is_streamed(&s->pb) && video_enc) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
581 file_size = url_ftell(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
582 url_fseek(pb, 4, SEEK_SET);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
583 put_le32(pb, file_size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
584 url_fseek(pb, swf->duration_pos, SEEK_SET);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
585 put_le16(pb, video_enc->frame_number);
1643
20c25a594c49 seek back at the end of file after updating header
bcoudurier
parents: 1642
diff changeset
586 url_fseek(pb, file_size, SEEK_SET);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
587 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
588 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
589 }
858
66cc656ea404 Replace CONFIG_ENCODERS/CONFIG_DECODERS with CONFIG_MUXERS/CONFIG_DEMUXERS
diego
parents: 820
diff changeset
590 #endif //CONFIG_MUXERS
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
591
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
592 /*********************************************/
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
593 /* Extract FLV encoded frame and MP3 from swf
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
594 Note that the detection of the real frame
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
595 is inaccurate at this point as it can be
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
596 quite tricky to determine, you almost certainly
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
597 will get a bad audio/video sync */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
598
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
599 static int get_swf_tag(ByteIOContext *pb, int *len_ptr)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
600 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
601 int tag, len;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
602
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
603 if (url_feof(pb))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
604 return -1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
605
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
606 tag = get_le16(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
607 len = tag & 0x3f;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
608 tag = tag >> 6;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
609 if (len == 0x3f) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
610 len = get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
611 }
806
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
612 // av_log(NULL, AV_LOG_DEBUG, "Tag: %d - Len: %d\n", tag, len);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
613 *len_ptr = len;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
614 return tag;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
615 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
616
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
617
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
618 static int swf_probe(AVProbeData *p)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
619 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
620 /* check file header */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
621 if (p->buf_size <= 16)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
622 return 0;
806
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
623 if ((p->buf[0] == 'F' || p->buf[0] == 'C') && p->buf[1] == 'W' &&
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
624 p->buf[2] == 'S')
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
625 return AVPROBE_SCORE_MAX;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
626 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
627 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
628 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
629
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
630 static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
631 {
1641
ea284c26b0f4 priv_data is allocated internally
bcoudurier
parents: 1640
diff changeset
632 SWFContext *swf = s->priv_data;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
633 ByteIOContext *pb = &s->pb;
1889
e81bae269ae1 fix pts handling
bcoudurier
parents: 1882
diff changeset
634 int nbits, len, tag, v;
1827
2f2afa0a7bd3 don't parse whole swf file in header, can now play ffserver swf streams
bcoudurier
parents: 1826
diff changeset
635 offset_t frame_offset = -1;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
636 AVStream *ast = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
637 AVStream *vst = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
638
806
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
639 tag = get_be32(pb) & 0xffffff00;
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
640
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
641 if (tag == MKBETAG('C', 'W', 'S', 0))
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
642 {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
643 av_log(s, AV_LOG_ERROR, "Compressed SWF format not supported\n");
806
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
644 return AVERROR_IO;
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
645 }
e1007d19f28d tell the user if compressed swf found
alex
parents: 775
diff changeset
646 if (tag != MKBETAG('F', 'W', 'S', 0))
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 468
diff changeset
647 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
648 get_le32(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
649 /* skip rectangle size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
650 nbits = get_byte(pb) >> 3;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
651 len = (4 * nbits - 3 + 7) / 8;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
652 url_fskip(pb, len);
1889
e81bae269ae1 fix pts handling
bcoudurier
parents: 1882
diff changeset
653 swf->frame_rate = get_le16(pb); /* 8.8 fixed */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
654 get_le16(pb); /* frame count */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
655
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
656 swf->samples_per_frame = 0;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
657
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
658 for(;;) {
1827
2f2afa0a7bd3 don't parse whole swf file in header, can now play ffserver swf streams
bcoudurier
parents: 1826
diff changeset
659 offset_t tag_offset = url_ftell(pb);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
660 tag = get_swf_tag(pb, &len);
1827
2f2afa0a7bd3 don't parse whole swf file in header, can now play ffserver swf streams
bcoudurier
parents: 1826
diff changeset
661 if (tag < 0 || tag == TAG_VIDEOFRAME || tag == TAG_STREAMBLOCK) {
2f2afa0a7bd3 don't parse whole swf file in header, can now play ffserver swf streams
bcoudurier
parents: 1826
diff changeset
662 url_fseek(pb, frame_offset == -1 ? tag_offset : frame_offset, SEEK_SET);
2f2afa0a7bd3 don't parse whole swf file in header, can now play ffserver swf streams
bcoudurier
parents: 1826
diff changeset
663 break;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
664 }
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
665 if ( tag == TAG_VIDEOSTREAM && !vst) {
1637
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
666 int ch_id = get_le16(pb);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
667 get_le16(pb);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
668 get_le16(pb);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
669 get_le16(pb);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
670 get_byte(pb);
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
671 /* Check for FLV1 */
1637
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
672 vst = av_new_stream(s, ch_id);
1635
59d2c40950ca always export videostreams
bcoudurier
parents: 1623
diff changeset
673 vst->codec->codec_type = CODEC_TYPE_VIDEO;
59d2c40950ca always export videostreams
bcoudurier
parents: 1623
diff changeset
674 vst->codec->codec_id = codec_get_id(swf_codec_tags, get_byte(pb));
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
675 } else if ( ( tag == TAG_STREAMHEAD || tag == TAG_STREAMHEAD2 ) && !ast) {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
676 /* streaming found */
1642
8b62e4e73069 simplify
bcoudurier
parents: 1641
diff changeset
677 int sample_rate_code;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
678 get_byte(pb);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
679 v = get_byte(pb);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
680 swf->samples_per_frame = get_le16(pb);
1638
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
681 ast = av_new_stream(s, -1); /* -1 to avoid clash with video stream ch_id */
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
682 swf->audio_stream_index = ast->index;
1636
783969dab069 always export audiostreams
bcoudurier
parents: 1635
diff changeset
683 ast->codec->channels = 1 + (v&1);
783969dab069 always export audiostreams
bcoudurier
parents: 1635
diff changeset
684 ast->codec->codec_type = CODEC_TYPE_AUDIO;
1833
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
685 ast->codec->codec_id = codec_get_id(swf_audio_codec_tags, (v>>4) & 15);
1636
783969dab069 always export audiostreams
bcoudurier
parents: 1635
diff changeset
686 ast->need_parsing = 1;
1642
8b62e4e73069 simplify
bcoudurier
parents: 1641
diff changeset
687 sample_rate_code= (v>>2) & 3;
8b62e4e73069 simplify
bcoudurier
parents: 1641
diff changeset
688 if (!sample_rate_code)
1636
783969dab069 always export audiostreams
bcoudurier
parents: 1635
diff changeset
689 return AVERROR_IO;
1642
8b62e4e73069 simplify
bcoudurier
parents: 1641
diff changeset
690 ast->codec->sample_rate = 11025 << (sample_rate_code-1);
1890
04f9a3ae30af seems safer to set pts timebase to sample rate, fix some mp3
bcoudurier
parents: 1889
diff changeset
691 av_set_pts_info(ast, 64, 1, ast->codec->sample_rate);
1619
b95cdbfc2d16 dont skip too many bytes if tag is TAG_STREAMHEAD2 and mp3
bcoudurier
parents: 1519
diff changeset
692 if (len > 4)
325
e1d4300bf783 SWF sanity check patch by (Glyn Kennington <glyn dot kennington at ox dot compsoc dot net>)
michael
parents: 277
diff changeset
693 url_fskip(pb,len-4);
5
39c4c4336486 cleanup
michaelni
parents: 0
diff changeset
694
1640
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
695 } else if (tag == TAG_JPEG2 && !vst) {
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
696 vst = av_new_stream(s, -2); /* -2 to avoid clash with video stream and audio stream */
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
697 vst->codec->codec_type = CODEC_TYPE_VIDEO;
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
698 vst->codec->codec_id = CODEC_ID_MJPEG;
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
699 url_fskip(pb, len);
1827
2f2afa0a7bd3 don't parse whole swf file in header, can now play ffserver swf streams
bcoudurier
parents: 1826
diff changeset
700 frame_offset = tag_offset;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
701 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
702 url_fskip(pb, len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
703 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
704 }
1889
e81bae269ae1 fix pts handling
bcoudurier
parents: 1882
diff changeset
705 if (vst)
e81bae269ae1 fix pts handling
bcoudurier
parents: 1882
diff changeset
706 av_set_pts_info(vst, 64, 256, swf->frame_rate);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
707 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
708 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
709
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
710 static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
711 {
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
712 SWFContext *swf = s->priv_data;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
713 ByteIOContext *pb = &s->pb;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
714 AVStream *st = 0;
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
715 int tag, len, i, frame;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
716
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
717 for(;;) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
718 tag = get_swf_tag(pb, &len);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
719 if (tag < 0)
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 468
diff changeset
720 return AVERROR_IO;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
721 if (tag == TAG_VIDEOFRAME) {
1637
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
722 int ch_id = get_le16(pb);
1639
4740223bfd8e simplify
bcoudurier
parents: 1638
diff changeset
723 len -= 2;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
724 for( i=0; i<s->nb_streams; i++ ) {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
725 st = s->streams[i];
1637
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
726 if (st->codec->codec_type == CODEC_TYPE_VIDEO && st->id == ch_id) {
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
727 frame = get_le16(pb);
1639
4740223bfd8e simplify
bcoudurier
parents: 1638
diff changeset
728 av_get_packet(pb, pkt, len-2);
1889
e81bae269ae1 fix pts handling
bcoudurier
parents: 1882
diff changeset
729 pkt->pts = frame;
1637
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
730 pkt->stream_index = st->index;
50bbf9658436 use ch_id as AVStream id and simplify
bcoudurier
parents: 1636
diff changeset
731 return pkt->size;
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
732 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 858
diff changeset
733 }
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
734 } else if (tag == TAG_STREAMBLOCK) {
1638
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
735 st = s->streams[swf->audio_stream_index];
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
736 if (st->codec->codec_id == CODEC_ID_MP3) {
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
737 url_fskip(pb, 4);
0c6b7ac24cd7 swf can contain only one audio track, simplify
bcoudurier
parents: 1637
diff changeset
738 av_get_packet(pb, pkt, len-4);
1833
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
739 } else { // ADPCM, PCM
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
740 av_get_packet(pb, pkt, len);
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
741 }
1833
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
742 pkt->stream_index = st->index;
09a67819763e support for adpcm swf, pcm
bcoudurier
parents: 1827
diff changeset
743 return pkt->size;
1640
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
744 } else if (tag == TAG_JPEG2) {
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
745 for (i=0; i<s->nb_streams; i++) {
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
746 st = s->streams[i];
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
747 if (st->id == -2) {
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
748 get_le16(pb); /* BITMAP_ID */
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
749 av_new_packet(pkt, len-2);
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
750 get_buffer(pb, pkt->data, 4);
1673
a782462e2497 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 1643
diff changeset
751 if (AV_RB32(pkt->data) == 0xffd8ffd9) {
1640
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
752 /* old SWF files containing SOI/EOI as data start */
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
753 pkt->size -= 4;
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
754 get_buffer(pb, pkt->data, pkt->size);
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
755 } else {
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
756 get_buffer(pb, pkt->data + 4, pkt->size - 4);
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
757 }
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
758 pkt->stream_index = st->index;
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
759 return pkt->size;
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
760 }
ec1236a03504 enable mjpeg in swf
bcoudurier
parents: 1639
diff changeset
761 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
762 }
1639
4740223bfd8e simplify
bcoudurier
parents: 1638
diff changeset
763 url_fskip(pb, len);
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
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
768 static int swf_read_close(AVFormatContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
769 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
770 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
771 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
772
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
773 #ifdef CONFIG_SWF_DEMUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
774 AVInputFormat swf_demuxer = {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
775 "swf",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
776 "Flash format",
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
777 sizeof(SWFContext),
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
778 swf_probe,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
779 swf_read_header,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
780 swf_read_packet,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
781 swf_read_close,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
782 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
783 #endif
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
784 #ifdef CONFIG_SWF_MUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
785 AVOutputFormat swf_muxer = {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
786 "swf",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
787 "Flash format",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
788 "application/x-shockwave-flash",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
789 "swf",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
790 sizeof(SWFContext),
359
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
791 CODEC_ID_MP3,
e9232aa21976 - made --extra-cflags option work on darwin
michael
parents: 325
diff changeset
792 CODEC_ID_FLV1,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
793 swf_write_header,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
794 swf_write_packet,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
795 swf_write_trailer,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
796 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
797 #endif